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 的主要版本一起使用?

使用 PHP 从 SQL Server 中选择数据

从 PHP 查询 SQL Server

无法使用 PHP 和 Codeigniter 从 PHP Azure 连接到 SQL Server Azure

使用 html 和 php 从 xampp sql server 获取数据