【问题标题】:Left joining table to itself with WHERE使用 WHERE 将表左连接到自身
【发布时间】:2013-12-03 15:12:21
【问题描述】:

我有一个名为“guests”的表格,其中包含以下列:

  • guest_id
  • wedding_id
  • fname
  • 名字
  • inviter_id

我需要从某个wedding_id 中选择所有客人,然后加入实际邀请者fnamelname 而不是inviter_id(与客人ID 对应)。

我已经走到这一步了:

SELECT u.fname fname, u.lname lname, r.fname inviter_f, r.lname inviter_l 
FROM guests u LEFT JOIN guests r ON u.inviter_id = r.guest_id

我缺少的唯一一块拼图是添加:

where wedding_id=10

(仅选择特定婚礼 ID 的结果)。

编辑后: 最终查询: SELECT u.fname fname, u.lname lname, r.fname 邀请者_f, r.lname 邀请者_l FROM guest u LEFT JOIN guest r ON u.inviter_id = r.guest_id where u.wedding_id=10

现在是一个后续问题:

如何在没有invitationer_id(设置为0)的情况下返回空的''值,在当前查询中它返回为NULL? (inviter_f 和inviter_l 返回NULL)

【问题讨论】:

  • 添加 where u.wedding_id=10 时发生了什么?
  • 您可能需要说出 u.wedding_id=10 或 r.wedding_id=10 的位置
  • 我爱你 Gayathri!我尝试将其添加到查询中,而不是仅将其附加到末尾。有用!!! ahhhhhh :) 这是最后的查询: SELECT u.fname fname, u.lname lname, r.fname inviter_f, r.lname inviter_l FROM guest u LEFT JOIN guest r ON u.inviter_id = r.guest_id where u.wedding_id=10

标签: mysql sql join


【解决方案1】:

试试这个查询:

SELECT u.fname fname, u.lname lname, r.fname inviter_f, r.lname inviter_l FROM guests u LEFT JOIN guests r ON u.inviter_id = r.guest_id WHERE u.wedding_id = 10

【讨论】:

  • 有效!谢谢!一个后续问题:我如何返回空值 '' 而不是 NULL 邀请者_f 和邀请者_l ?谢谢!
  • SELECT u.fname fname, u.lname lname, IF(r.fname IS NULL, '', r.fname) 邀请者_f, IF(r.lname IS NULL, '', r.lname )inviter_l FROM guest u LEFT JOIN guest r ON u.inviter_id = r.guest_id WHERE u.wedding_id = 10
【解决方案2】:
FROM guests u LEFT JOIN guests r ON u.inviter_id = r.guest_id and r.wedding_id = u.wedding_id where u.wedding_id = 10;

【讨论】:

  • 你不能把WHERE放在JOIN之前。
  • 我试过了,除了查询的结尾,你似乎不能放在任何地方......但是谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
相关资源
最近更新 更多