我正在使用 Dapper 进行一些查询,遇到一个用例,我需要使用相同的别名返回不同的列,以便能够映射到具有相同属性名称的不同对象,例如
Teacher.Name
和Student.Name
。我还使用了一个视图,它确实抱怨不允许具有相同名称的列。因此,我在视图中将列别名为不同的名称,然后当从视图中进行选择时,我将它们别名回相同的名称并且它起作用了,这是我没想到的。我也找不到任何这方面的资源。
示例:https://sqlfiddle.com/sql-server/online-compiler?id=4e489d23-e1db-4655-ad8e-493324700b09
CREATE TABLE users (
id INT,
name VARCHAR(50),
date DATE
);
-- Insert test data
INSERT INTO users (id, name, date)
VALUES (1, 'John Doe', '2024-01-01'),
(2, 'Jane Smith', '2024-01-02');
-- Test the SELECT statement with the same alias for different columns
SELECT
id,
name AS alias_name,
date AS alias_name
FROM
users;
-- Clean up
DROP TABLE users;
顶级 SQL 查询可以有多个同名列,实际上甚至可以有没有名称的列。
通常,查询 API 将允许您按名称(“id”、“名称”、“金额”等)或按序数(1、2、3 等)检索这些列。在您的情况下,通过名称检索它们不是一个选择。您需要按序数检索它们。
视图中出现的所有列也需要有不同的名称,因为 SQL 将它们视为与表类似的数据库对象。
当涉及到子查询时:
表表达式子查询(FROM、JOIN、LATERAL、)需要具有明确标识的列,以便它们可以由查询的外部级别范围使用。
标量子查询(返回单个列的查询)可以自由地具有或不具有列名称。
不对称查询(ANY/ALL修饰符)可以自由地具有或不具有相同/相同的名称;存在查询([NOT] EXISTS、[NOT] IN)属于同一类别。