2013-10-23 32 views
0

我有3個表:產品,功能和鏈接表(多對多) 例如,我需要從鏈接表中獲得所有產品,其中有3個功能id = 1,2和3選擇涉及多對多表

link_id | product_id | feature_id 
    --------------------------------- 
    100  | 1   | 1 
    101  | 1   | 2 
    102  | 1   | 3 

夥計們,寫查詢的最簡單方法是什麼?

SELECT pr.* FROM product pr, link lk WHERE pr.id = lk.product_id 
AND lk.feature_id = 1 AND lk.feature_id = 2 AND lk.feature_id = 3 

不工作

回答

0

當你正在檢查三個不同記錄的值,你不能檢查他們所有的所有記錄。

提出三點連接,一個agains各功能的鏈接記錄:

select 
    pr.* 
from 
    product pr 
    inner join link lk1 on pr.id = lk1.product_id and lk1.feature_id = 1 
    inner join link lk2 on pr.id = lk2.product_id and lk2.feature_id = 2 
    inner join link lk3 on pr.id = lk3.product_id and lk3.feature_id = 3 
0

做這樣的:

SELECT pr.* FROM product pr, link lk 
WHERE pr.id = lk.product_id 
AND lk.feature_id IN (1, 2, 3) 
with ur;