【问题标题】: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 查询。你真正想达到什么目标?

标签: php sql sql-server pdo 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多