SQL Server 是不是可以使用 PHP 从 UNION 查询中返回不同的别名列名?
Posted
技术标签:
【中文标题】SQL Server 是不是可以使用 PHP 从 UNION 查询中返回不同的别名列名?【英文标题】:Is it possible for SQL Server to return different aliased column names from a UNION query using PHP?SQL Server 是否可以使用 PHP 从 UNION 查询中返回不同的别名列名? 【发布时间】:2015-07-29 15:57:59 【问题描述】:我在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 和 Prepared Statements,就像这样,
$results = $prepared_statement->fetchAll(PDO::FETCH_ASSOC);
也许不是最好的例子,但我怎样才能得到那些别名列名?查询本身可以正常工作。我正在使用 SQL Server 2012。
【问题讨论】:
联合查询的结果集将只有一列。该列将从 UNION 中的第一个查询中获得其名称。由于您只有一列,因此您只能命名一列。如果您想要更多列,则必须调整查询以反映这一点。 @JNevill 我希望有一种我不知道的方法来克服本机功能。我想这没有意义。 同意@JNevill - 我真的不明白你为什么要按照你的要求去做。为什么不只运行 3 个单独的查询 - 无论如何你都在这样做,使用 UNION。 您的查询有效地执行了SELECT DISTINCT name AS manager FROM employees WHERE type IN (1,2,3)
。我怀疑您想要的不是 UNION 查询。你真正想达到什么目标?
【参考方案1】:
你不能。 UNION 将使用第一个查询中的别名列名(我认为,它可能是最后一个)。这就是 UNION 的意义所在。
您可以选择多个列并为每个列设置别名,但不能为不同的行设置不同的列别名,这是没有意义的。
【讨论】:
【参考方案2】:单个列只有一个名称,但您可以添加 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
【讨论】:
以上是关于SQL Server 是不是可以使用 PHP 从 UNION 查询中返回不同的别名列名?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP PDO 从 Mac 连接到 Sql Server?
从 SQL Server Express 生成的数据库是不是可以与 SQL 的主要版本一起使用?