gpt4 book ai didi

mysql - MYSQL 中的右外连接问题

转载 作者:行者123 更新时间:2023-11-29 06:11:01 24 4
gpt4 key购买 nike

无论我使用左外连接还是右外连接,外连接似乎都不起作用:

SELECT * FROM `event_orchestra_musicians` eom
right outer join `orchestra_instruments` oi on eom.instrument_id = oi.oi_id
where event_id = 2
order by instrument_id

Orchestra_instruments 包含具有唯一 ID 的不同乐器,即:

  1. fiddle
  2. 中提琴
  3. 竖琴
  4. 短笛

Event_Orchestra_Musicians 是一个将音乐家与乐器连接起来的查找表,即:

musician_id, instrument_id, event_id, 
1 1 2
2 1 2
3 3 2
4 2 2

当我使用这些表中的数据进行任何外部联接时,我会得到内部联接的结果(Piccolo 不会显示空的音乐家 ID,它根本不会显示)。我是不是做错了什么?

编辑:

所以我做了一些胡闹。问题似乎是因为 events_orchestra_musicians 表中有一条记录,其 event_id 为 5,instrument_id 为 7。如果我删除该记录,则外连接有效。我不明白的是,如果该记录在那里,并且我使用 where 子句来查找 event_id = 2,那么如果其中有一条 Instrument_id 为 7 的记录(如果其 event_id 为 5),那么为什么它很重要?

最佳答案

试试这个:

select oi.oi_id, oi.instrument_name, eom.musician_id
from orchestra_instruments oi
left join event_orchestra_musicians eom on oi.oi_id = eom.instrument_id
where (eom.event_id = 2 or eom.event_id is null)
order by oi.oi_id

您必须使用 Orchestra_instruments 作为基表,因为这是您想要所有记录的表,即使不存在音乐家也是如此。我无法想象使用右连接而不是左连接的任何原因,并且隐含了外部连接。另外,您必须允许 event_id 为 2 或 null,因为如果没有匹配的记录要加入,则它不能为 2。

关于mysql - MYSQL 中的右外连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9131862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com