我試圖從表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的效果。 –