我在UNION
语句(或UNION ALL
)中有几个SELECT
查询。由于它是一个UNION
,它将返回具有一列的单个数据集(在本例中我只返回一个值),通常是第一个查询中的列名。
我为每个查询中的列添加了别名,因此我可以在PHP脚本中按名称而不是按索引使用数据。
是否可以从每个单独的SELECT
中获得单独的列名别名?
,
SELECT name as manager FROM employees WHERE type = 1
UNION
SELECT name as mid_level_manager FROM employees WHERE type = 2
UNION
SELECT name as regular_employee FROM employees WHERE type = 3
我在准备好的语句中使用PDO,像这样,
$results = $prepared_statement->fetchAll(PDO::FETCH_ASSOC);
可能不是最好的例子,但是我如何获得这些别名列名呢?查询本身工作得很好。我使用的是SQL Server 2012.
你不能。UNION将使用第一个查询中的别名列名(我认为可能是最后一个)。这就是联盟的意义所在。
您可以选择多个列并为每个列设置别名,但不能为不同的行设置不同的列别名,这没有意义。
对于单个列只有一个名称,但是您可以添加type
列,指示哪个选择返回该行:
SELECT type, name as manager FROM employees WHERE type = 1
UNION
SELECT type, name as mid_level_manager FROM employees WHERE type = 2
UNION
SELECT type, name as regular_employee FROM employees WHERE type = 3