我的MySQL技能非常基础,所以我需要的(如果可能的话)是一个SELECT
语句,用于从中不同的行中选择不同的列em>相同的表。大多数谷歌提出的与组合不同的表或从不同的行选择相同的列有关。
表格
id | c1 | c2 | c3 | c4 | c5 | c6 | c7
-----------------------------------------------------
1 | THIS | THIS | THIS | a | a | a | a
2 | a | a | a | a | THIS | THIS | a
我想从第1行中选择 c1,c2,c3 列,从第2行中选择 c5,c6 。列名和ID号是已知的。
我可以触发两个查询并合并数据:
SELECT c1,c2,c3 FROM table WHERE id=1
SELECT c5,c6 FROM table WHERE id=2
或者我可以同时从两行中获取所有列并过滤掉我之后需要的数据
SELECT c1,c2,c3,c5,c6 FROM table WHERE id=1 OR id=2
我的问题:是否有一个SELECT
语句将两者结合起来,所以我在一个查询中得到了合并结果?
我发现UNION
可以正常工作,但只有在两个select-statements中选择的列数相同时才有效。在这种情况下,不是。
任何帮助都将不胜感激。
[edit] 请参阅下面的答案。
答案 0 :(得分:3)
上面的答案仍然没有完全符合我的要求,因为这些查询返回了两行和/或与列名混淆。
最后结果很简单:
SELECT *
FROM (SELECT c1,c2,c3 FROM table WHERE id=1) AS t1,
FROM (SELECT c5,c6 FROM table WHERE id=2) AS t2
它返回一行,包含c1,c2,c3,c5和c6的值及其对应的列名
答案 1 :(得分:2)
如果为缺少的字段选择常量值,则可以使用UNION
:
SELECT c1, c2, c3 FROM table WHERE id=1
UNION ALL
SELECT c5, c6, NULL c3 FROM table WHERE id=2
使用您的示例数据,这将为您提供:
c1 c2 c3
THIS THIS THIS
THIS THIS NULL
答案 2 :(得分:1)
如果你愿意,你可以做一个条件列选择而不是弄乱联合:)
SELECT
CASE WHEN id = 1 THEN c1 ELSE c5 END
CASE WHEN id = 1 THEN c2 ELSE c6 END
CASE WHEN id = 1 THEN c3 ELSE NULL END
FROM table