加入多个ID
Join on multiple ids
我一直在帮助一位朋友解决他的一些 MySQL 问题,并想出了这个问题。在写这篇文章时,我有点想知道是否有更好的方法来做到这一点:
select offers.*, users.*, items.* from offers
join users on users.id = offers.sender_id
join items on
(items.id = offers.receiver_gets_1)
or
(items.id = offers.receiver_gets_2)
or
(items.id = offers.receiver_gets_3)
or
(items.id = offers.receiver_gets_4)
or
(items.id = offers.sender_gets_1)
or
(items.id = offers.sender_gets_2)
or
(items.id = offers.sender_gets_3)
or
(items.id = offers.sender_gets_4)
where receiver_id = 1;
这让我感觉很糟糕,因为我真的觉得我给了他一些乱七八糟的问题(他并不介意)。这让我想知道是否有更好的方式来写下它?
我试着在 google 上寻找类似这些问题的内容:
- Mysql Left Join on multiple conditions
- MySQL how to join tables on two fields
- https://dba.stackexchange.com/questions/33996/which-is-better-many-join-conditions-or-many-where-conditions
但是这些并没有真正提供任何其他方式。我 运行 回答了另一个问题,答案设置与我自己的查询相同。
我知道数据库也许可以建模得更好,但我不喜欢玩这个数据库。我不太同意他的表格是如何构建的或其他任何东西,但这个问题对我来说仍然很有趣。
您可以使用 IN
:
select offers.*, users.*, items.* from offers
join users on users.id = offers.sender_id
join items on
items.id IN (offers.receiver_gets_1, offers.receiver_gets_2, offers.receiver_gets_3, offers.receiver_gets_4,
offers.sender_gets_1, offers.sender_gets_2, offers.sender_gets_3, offers.sender_gets_4)
但是,通常最好设计您的模式,这样您就不会像 receiver_gets_1
、receiver_gets_2
、...这样的重复列。相反,您应该有一个关系 table 如果每个都在不同的行中,那么您只需要加入一次即可获得所有匹配项。
我一直在帮助一位朋友解决他的一些 MySQL 问题,并想出了这个问题。在写这篇文章时,我有点想知道是否有更好的方法来做到这一点:
select offers.*, users.*, items.* from offers
join users on users.id = offers.sender_id
join items on
(items.id = offers.receiver_gets_1)
or
(items.id = offers.receiver_gets_2)
or
(items.id = offers.receiver_gets_3)
or
(items.id = offers.receiver_gets_4)
or
(items.id = offers.sender_gets_1)
or
(items.id = offers.sender_gets_2)
or
(items.id = offers.sender_gets_3)
or
(items.id = offers.sender_gets_4)
where receiver_id = 1;
这让我感觉很糟糕,因为我真的觉得我给了他一些乱七八糟的问题(他并不介意)。这让我想知道是否有更好的方式来写下它?
我试着在 google 上寻找类似这些问题的内容:
- Mysql Left Join on multiple conditions
- MySQL how to join tables on two fields
- https://dba.stackexchange.com/questions/33996/which-is-better-many-join-conditions-or-many-where-conditions
但是这些并没有真正提供任何其他方式。我 运行 回答了另一个问题,答案设置与我自己的查询相同。
我知道数据库也许可以建模得更好,但我不喜欢玩这个数据库。我不太同意他的表格是如何构建的或其他任何东西,但这个问题对我来说仍然很有趣。
您可以使用 IN
:
select offers.*, users.*, items.* from offers
join users on users.id = offers.sender_id
join items on
items.id IN (offers.receiver_gets_1, offers.receiver_gets_2, offers.receiver_gets_3, offers.receiver_gets_4,
offers.sender_gets_1, offers.sender_gets_2, offers.sender_gets_3, offers.sender_gets_4)
但是,通常最好设计您的模式,这样您就不会像 receiver_gets_1
、receiver_gets_2
、...这样的重复列。相反,您应该有一个关系 table 如果每个都在不同的行中,那么您只需要加入一次即可获得所有匹配项。