选择具有不同AS的相同列

时间:2016-02-21 19:20:25

标签: mysql

我一直在寻找这个问题几个小时;不确定我是否错过了某个关键字,或者这只是一个不寻常的期望,但是情况如下:

我想在一个查询中多次从同一个表中选择相同的列。我希望最终结果只有一行。

一个基本的例子是:

  

SELECT last AS firstLastlast AS secondLast FROM   table WHERE last ='name'或last ='其他'LIMIT 1

想法是:firstLast应该包含last等于name时的结果,secondLast应该包含last等于other的结果。

最终结果应如下所示:

  • 命名其他

我得到的当前结果将是:

  • name NULL

如果我没有LIMIT,它会创建第二行:

  • name NULL
  • NULL其他

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您希望两列不同,则需要在同一个表的两个实例之间进行连接。

SELECT firstTable.last AS firstLast, secondTable.last AS secondLast from table
 as firstTable inner join table as secondTable
 WHERE firstTable.last = 'name' and secondTable.last = 'other' LIMIT 1

这里唯一缺少的是如何连接联接(on语句)。如果你只想得到一个其他的名字,你就可以不用。结果,没有其他列,但如果表上有其他列,如id,您应该使用它来进行连接

答案 1 :(得分:1)

您正在寻找CASE WHEN construct与汇总(MAXMIN)的组合。顺便说一句,您可以使用IN代替OR

SELECT MAX(CASE last WHEN 'name'  THEN last END) AS firstLast,
       MAX(CASE last WHEN 'other' THEN last END) AS secondLast
FROM   mytable
WHERE  last IN ('name', 'other')

无需使用LIMIT因为MAX您正在汇总结果。

这是SQL Fiddle

请注意,上述查询不是很有趣,因为它只输出您在WHERE子句中输入的内容。

您可以选择符合 last 值的内容。例如相应人的年龄:

SELECT MAX(CASE last WHEN 'johnson' THEN age END) AS johnsons_age,
       MAX(CASE last WHEN 'clark'   THEN age END) AS clarks_age
FROM   mytable
WHERE  last IN ('johnson', 'clark')