MySQL查询-条件时连接和连接,否则为空
Posted
技术标签:
【中文标题】MySQL查询-条件时连接和连接,否则为空【英文标题】:MySQL query- join and concatenate when condition, else null 【发布时间】:2021-10-17 20:07:37 【问题描述】:我有一张食谱表和一张图片表。
食谱:
id | title |
---|---|
1 | 'Pancake' |
2 | 'Pudding' |
3 | 'Pizza' |
图片:
id | recipe_id | url |
---|---|---|
1 | 1 | 'images\pancake1' |
2 | 1 | 'images\pancake2' |
3 | 2 | 'images\pizza |
我想用 images.url 加入食谱并像这样连接网址:
recipe_id | urls |
---|---|
1 | 'images\pancake1, images\pancake2' |
2 | 'images\pizza' |
3 | null |
但我明白了:
recipe_id | urls |
---|---|
1 | null |
2 | 'images\pancake1, images\pancake2, images\pizza' |
3 | null |
我的查询是:
SELECT r.*,
CASE WHEN i.recipe_id = r.id THEN
GROUP_CONCAT(i.url)
END AS url
FROM recipes r
JOIN images i
GROUP BY r.id;
【问题讨论】:
复制漂亮格式的 SQL 命令和数据使用 dbfiddle.uk 及其 Markdown 导出按钮 所以我对LEFT OUTER JOIN
的第一条评论是正确的en.wikipedia.org/wiki/Join_(SQL)
【参考方案1】:
您的联接甚至没有 ON
子句。
你需要LEFT
加入:
SELECT r.id recipe_id,
GROUP_CONCAT(i.url ORDER BY i.id) urls
FROM Recipes r LEFT JOIN Images i
ON i.recipe_id = r.id
GROUP BY r.id
【讨论】:
美丽。我有相同的 on 子句,但 left join 成功了。 @MosheM 您也可以通过伪聚合添加标题列。见dbfiddle.uk/…以上是关于MySQL查询-条件时连接和连接,否则为空的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 左连接时,查询条件查询某个字段为空或者为特定值解决方案