【问题标题】:Joining two tables and create virtual columns by their type连接两个表并按它们的类型创建虚拟列
【发布时间】:2016-07-04 00:39:42
【问题描述】:

我目前正在为学者考试开发某种日历。由于目前日历非常慢,我想增强它背后的 MySQL。 我已经阅读了 JOIN 并尝试使用它们来直接获得我需要的结果,但我目前遇到了一个问题。

我有两张表(简体)

DAYS                           EVENTS
id | date                      id | day_id | class | text
1  | 2016-02-05                1  | 1      | a     | Example
2  | 2016-02-06                2  | 1      | b     | Example for Class b
etc.

现在,如果我选择一天,我想收到以下结果:

[0] => Array
    (
        [id] => 1
        [date] => 2016-01-25
        [a] => 1 (ID of the Event on that day with the class 'a')
        [b] => 2 (ID of the Event on that day with the class 'b')
        [c] => NULL
    )

但是我创建的查询没有合并结果:

[0] => Array
    (
        [id] => 1
        [date] => 2016-02-05
        [a] => 13
        [b] => 
        [c] => 
    )

[1] => Array
    (
        [id] => 11
        [date] => 2016-02-05
        [a] => 
        [b] => 14
        [c] => 
    )

我怎样才能获得合并的两个结果?我的查询如下所示:

SELECT d.*, 
     CASE WHEN e.class = 'a' THEN e.id ELSE NULL END AS a,
     CASE WHEN e.class = 'b' THEN e.id ELSE NULL END AS b,
     CASE WHEN e.class = 'c' THEN e.id ELSE NULL END AS c
  FROM examplan_days d
      LEFT JOIN examplan_events e ON d.id = e.day_id

【问题讨论】:

    标签: mysql join merge


    【解决方案1】:

    我想你想要聚合:

    SELECT d.*, 
           MAX(CASE WHEN e.class = 'a' THEN e.id END) AS a,
           MAX(CASE WHEN e.class = 'b' THEN e.id END) AS b,
           MAX(CASE WHEN e.class = 'c' THEN e.id END) AS c
    FROM examplan_days d LEFT JOIN
         examplan_events e
         ON d.id = e.day_id
    GROUP BY d.id;
    

    如果您可以在某一天上不止一节课,那么您应该使用GROUP_CONCAT() 而不是MAX()

    【讨论】:

    • 一天的课程总是只有一个条目。而且分组不起作用,它只返回类a的结果,虽然应该有a、b和c的值
    • 接受他的查询并将 group by 更改为 group by d.date
    • 不幸的是也不起作用,与上述相同的问题。 // 编辑:只是忘记了 MAX 函数,谢谢。它有效
    • @Giraffe。 . .另外两列是什么?
    • @Gordon Linoff 究竟是哪几列?
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2021-04-11
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多