我一直在寻找这个问题几个小时;不确定我是否错过了某个关键字,或者这只是一个不寻常的期望,但是情况如下:
我想在一个查询中多次从同一个表中选择相同的列。我希望最终结果只有一行。
一个基本的例子是:
SELECT
last
ASfirstLast
,last
ASsecondLast
FROMtable
WHERElast
='name'或last
='其他'LIMIT 1
想法是:firstLast应该包含last等于name时的结果,secondLast应该包含last等于other的结果。
最终结果应如下所示:
我得到的当前结果将是:
如果我没有LIMIT,它会创建第二行:
谢谢!
答案 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与汇总(MAX
或MIN
)的组合。顺便说一句,您可以使用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
您正在汇总结果。
请注意,上述查询不是很有趣,因为它只输出您在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')