SQL Server 如何允许在同一个 SELECT 语句中使用多个相同的别名?

问题描述 投票:0回答:1

我正在使用 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;

enter image description here

sql sql-server select alias
1个回答
0
投票

顶级 SQL 查询可以有多个同名列,实际上甚至可以有没有名称的列。

通常,查询 API 将允许您按名称(“id”、“名称”、“金额”等)或按序数(1、2、3 等)检索这些列。在您的情况下,通过名称检索它们不是一个选择。您需要按序数检索它们。

视图中出现的所有列也需要有不同的名称,因为 SQL 将它们视为与表类似的数据库对象。

当涉及到子查询时:

    然而,
  1. 表表达式子查询(FROM、JOIN、LATERAL、)需要具有明确标识的列,以便它们可以由查询的外部级别范围使用。

  2. 标量子查询(返回单个列的查询)可以自由地具有或不具有列名称。

  3. 不对称查询(ANY/ALL修饰符)可以自由地具有或不具有相同/相同的名称;存在查询([NOT] EXISTS、[NOT] IN)属于同一类别。

© www.soinside.com 2019 - 2024. All rights reserved.