我试图从表A中选择与表B中的某些记录(m:n关系)相关的所有记录。 这些都是我的表:选择与另一个表中的记录m:n相关的数据库记录
hs_hotels: ID - 姓名
hs_hotel_options: HOTEL_ID - option_id
hs_options: ID - 姓名
现在我,让我们说3,来自表hs_options的某些记录的ID和我正在查找与给定记录相关的表hs_hotels中的所有记录fr om hs_options也适合其他条件。最后,我想要一组来自hs_hotels的记录。
这是我目前的尝试:
SELECT `hs_hotels`.*
FROM `hs_hotels`
RIGHT JOIN `hs_hotel_options` ON (`hs_hotels`.`id` = `hs_hotel_options`.`hotel_id`)
WHERE `hs_hotel_options`.`option_id` IN (1, 3, 5)
GROUP BY `hs_hotel`.`id`
1,3和5是从表hs_options记录的ID。这只是从hs_hotels中选择所有记录,这些记录与hs_options中3个给定记录中的1个相关,而不是全部3个记录。我的问题是我不知道如何解决这个问题。我可以尝试选择所有记录WHERE option_id = 1 AND option_id = 3 AND...
,但当然这不起作用。
你有什么想法如何做到这一点?提前致谢!
你用什么db? – maks
为什么你在这个查询中执行外连接?如果在hs_hotel中没有任何带有指定id的酒店,那么在hs_hotel_option中不会有任何具有指定hotel_id的记录。据我了解这是一个业务规则的要求。尝试删除外部联接,并在此仅使用内部联接,因为要执行的查询的结构是正确的 – maks
您有RIGHT JOIN,但后来在“RIGHT”表上执行了WHERE子句。这具有将RIGHT JOIN转换为INNER JOIN的效果。 –