V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
edis0n0
V2EX  ›  数据库

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

  •  
  •   edis0n0 · 2022-11-04 01:39:56 +08:00 · 1541 次点击
    这是一个创建于 728 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ```
    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 或者空字符串,剩下的字段都在,研究了很久都没成功。
    5 条回复    2022-11-04 10:59:33 +08:00
    PendingOni
        1
    PendingOni  
       2022-11-04 01:54:51 +08:00   ❤️ 1
    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
        2
    kkwa56188  
       2022-11-04 03:30:24 +08:00   ❤️ 1
    -- 也可以用 子查询. 这里用了个 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
        3
    akira  
       2022-11-04 06:48:14 +08:00   ❤️ 1
    `
    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
        4
    xuelu520  
       2022-11-04 10:57:38 +08:00   ❤️ 1
    left join 就行。
    楼主可以去看看 left/right/inner 几种的区别,几种 join 用的还是很多的。
    edis0n0
        5
    edis0n0  
    OP
       2022-11-04 10:59:33 +08:00
    成功了,谢谢大家
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1323 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:36 · PVG 07:36 · LAX 16:36 · JFK 19:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.