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 左连接时,查询条件查询某个字段为空或者为特定值解决方案

MySQL 左连接时,查询条件查询某个字段为空或者为特定值解决方案

MySql数据库与JDBC编程三

MySQL基本查询

mysq解决sleep进程过多的办法

mysql-面试-外连接查询