前端初学 SQL,求帮忙修改一个简单 MySQL 联查语句

2022-11-04 01:39:56 +08:00
 edis0n0
```
SELECT A.ItemId, Description, CreatedAt, B.GroupTitle FROM items A, groups B WHERE A.GroupId = B.GroupId AND UserId = 1 ORDER BY ItemId
```

这个查询会导致如果 A 的 GroupId 为 NULL ,A 这条记录就会被忽略掉。我想要的效果是该记录 GroupTitle 变成 NULL 或者空字符串,剩下的字段都在,研究了很久都没成功。
1573 次点击
所在节点    数据库
5 条回复
PendingOni
2022-11-04 01:54:51 +08:00
A 去 left join B?
```SQL
SELECT A.ItemId, Description, CreatedAt, B.GroupTitle
FROM items A
left join
groups B on A.GroupId = B.GroupId
WHERE UserId = 1
ORDER BY ItemId
```
kkwa56188
2022-11-04 03:30:24 +08:00
-- 也可以用 子查询. 这里用了个 max()是怕 B.GroupId 不唯一
SELECT A.ItemId, A.Description, A.CreatedAt
, ( select max(B.GroupTitle) from groups B WHERE B.GroupId = A.GroupId )
FROM items A
AND A.UserId = 1
ORDER BY A.ItemId;
akira
2022-11-04 06:48:14 +08:00
`
SELECT
A.ItemId,
A.Description,
A.CreatedAt,
B.GroupTitle
FROM items A
left join groups B on A.GroupId = B.GroupId
WHERE 1=1
AND UserId = 1
ORDER BY ItemId
`
xuelu520
2022-11-04 10:57:38 +08:00
left join 就行。
楼主可以去看看 left/right/inner 几种的区别,几种 join 用的还是很多的。
edis0n0
2022-11-04 10:59:33 +08:00
成功了,谢谢大家

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/892520

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX