【问题标题】:Select from same table, different rows, different columns从同一张表,不同的行,不同的列中选择
【发布时间】:2014-09-10 06:16:23
【问题描述】:

我的 MySQL 技能非常基础,所以我需要(如果可能的话)是一个 SELECT 语句,它从 中的 不同 行中选择 不同 列同一张表。大多数 Google 提出的方法是组合不同的表或从不同的行中选择相同的列。

表格

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 号是已知的。 p>

我可以触发两个查询并合并数据:

   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 可以工作,但只有在两个选择语句中选择的列数相同时才有效。在这种情况下,不是。

任何帮助将不胜感激。

[编辑]请看下面我的回答。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    上面的答案仍然没有完全符合我的要求,因为这些查询返回了两行和/或与列名混淆。

    最后结果很简单:

    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 的值及其对应的列名

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 我要试试。谢谢
      【解决方案3】:

      如果你愿意,你可以只做一个条件列选择而不是搞乱联合:)

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        • 2017-01-26
        • 2015-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多