我有一个表,其中包含网站上发布的最新评论,我想根据评论类型加入不同的表。
评论表类似于此结构:
id | type | ressource_id |
---+------+--------------+
1 | 1 | 10 |
2 | 3 | 7 |
3 | 3 | 12 |
4 | 1 | 22 |
5 | 4 | 22 |
6 | 5 | 23 |
新闻表:
news_id | notes| date |
--------+------+--------------+
10 | | 2015-08-12 |
22 | | 2015-07-12 |
教程表:
tuto_id | notes| date |
--------+------+--------------+
7 | | 2015-06-15 |
12 | | 2015-05-14 |
...类型 = 4, 5, 6 的类似表格
现在为了获得具体的评论,我正在两个表上进行左连接。
SELECT co.*
FROM Comments co
LEFT JOIN News n
ON co.id = n.news_id AND co.type = 1
LEFT JOIN Tutorial t
ON co.id = t.tuto_id AND co.type = 3
WHERE (co.type IN (1,3))
我有兴趣从左表中获取日期。如何将该列包含在输出列表中。
所需结果:(加入表的日期)
id | type | ressource_id | date |
---+------+--------------+--------------+
1 | 1 | 10 | 2015-08-12 |
2 | 3 | 7 | 2015-06-15 |
3 | 3 | 12 | 2015-05-14 |
4 | 1 | 22 | 2015-07-12 |
谢谢。
最佳答案
因为您永远不会从新闻
和教程
中获得相同评论的日期,您可能会使用
COALESCE`:
SELECT co.*, COALESCE(n.date,t.date)
FROM Comments co
LEFT JOIN News n
ON co.id = n.news_id AND co.type = 1
LEFT JOIN Tutorial t
ON co.id = t.tuto_id AND co.type = 3
WHERE (co.type IN (1,3))
COALESCE
将返回第一个不为 null
的参数,因此,如果有匹配的新闻,它将返回 News
中的日期,并且如果没有匹配的新闻,但有匹配的教程,它将返回教程
中的日期。
关于mysql - 根据条件执行多个左连接并获取非空列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39286179/