我正在尝试从表A中选择与表B中的某些X记录相关的所有记录(m:n关系)。 这些是我的表格:
hs_hotels: id - name
hs_hotel_options: hotel_id - option_id
hs_options: id - name
现在我有,比如3,来自表hs_options的某些记录的ID,我正在寻找表hs_hotels中与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...
但当然这不起作用。
你有什么想法怎么做?提前谢谢!
答案 0 :(得分:2)
SELECT
<column list>
FROM
Hotels H
WHERE
( SELECT COUNT(*)
FROM
Hotel_Options HO
WHERE
HO.hotel_id = H.hotel_id AND
HO.option_id IN (1, 3, 5)
) = 3
我不知道您的RDBMS是否支持此子查询语法。
答案 1 :(得分:2)
与Tom H.相似,您需要计算选项,然后将其与酒店联系起来。
您可以使用inner join
exists
或IN
。我选择了INNER JOIN
SELECT
*
FROM
Hotels H
INNER JOIN (
SELECT
hotel_id
FROM
hs_hotel_options
WHERE
option_id IN (1, 3, 5)
GROUP BY
hotel_id
HAVING COUNT(*) = 3) req_options
ON h.hotel_id = req_options.hotel_id