从相同的表,不同的行,不同的列中选择

时间:2014-09-10 06:16:23

标签: mysql

我的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] 请参阅下面的答案。

3 个答案:

答案 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