代码之家  ›  专栏  ›  技术社区  ›  zumzum

Postgres,从表A中选择所有记录,并在条件下左键联接可能存在的B记录?

  •  0
  • zumzum  · 技术社区  · 4 年前

    我有一个 device 桌子,和 user_device_details 可以有多个 为了一个

    我想买一些设备(通常在3台左右)设备id,左连接可能存在 用户\设备\详细信息 记录一个特定的 user_device_details.user_id

    具有 user_id =87连接它,这样我就可以拥有设备和可能的 用户\设备\详细信息 由用户87生成的记录。

    用户\设备\详细信息 记录。

    所以,总是返回我传递ID的所有设备,如果有 用户\设备\详细信息

    我试过这样的方法:

    select *
    from device d
    left join device_details dd on d.id = dd.device_id
    where d.id in (23,4,10)
    and dd.user_id=${userId}
    

    当我运行这个,我只得到23号设备,因为它是唯一一个有 用户设备_详细信息.用户id =87.

    如何将这三个设备与这两个空设备放在一起 对于设备4和10?

    1 回复  |  直到 4 年前
        1
  •  1
  •   a_horse_with_no_name    4 年前

    where.dd_user_id = .. 将左联接转换为内部联接,因为它将删除与联接条件不匹配的所有行。

    你可能想要:

    select *
    from device d
      left join device_details dd 
             on d.id = dd.device_id
            and dd.user_id=${userId}
    where d.id in (23,4,10)