2016-01-28 166 views
0

選擇多個條目比方說,我有一個存儲產品及其類別之間的關係表:動態查詢從關聯記錄表

p_id | c_id 
-----+----- 
    1 | 1 
    1 | 2 
    2 | 1 
    2 | 2 
    2 | 3 
    3 | 2 

正如你所看到的,一個產品可能有多個類別。如何搜索分配了類別1和類別2的產品?我能想到的最接近的是使用JOIN:

SELECT a.p_id 
FROM rel_table a 
JOIN rel table b 
    ON a.p_id=b.p_id AND b.c_id=2 
WHERE a.c_id=1 

雖然這實現了我想要的東西,這是不實際的,因爲我的查詢將是動態的。如果我必須選擇具有3個類別的產品,則這需要查詢中的困難更改。

有沒有更清潔,更聰明的方法來實現這一目標?我想象一下,選擇第一套,然後再用另一個類別提煉所需水平的數量。

回答

1

您應該使用IN或之間的這種事情。您可以動態地在IN/BETWEEN

SELECT a.p_id 
FROM rel_table a 
WHERE a.c_id IN (1,2,3) 
group by a.p_id 
having count(1) = 3 
order by a.p_id asc 

SELECT a.p_id 
FROM rel_table a 
WHERE a.c_id between 1 and 3 
group by a.p_id 
having count(1) = 3 
order by a.p_id asc 
+0

編輯創建你把值。請看一看! –

+0

完美,非常感謝!非常聰明的想法 – sidyll

+0

我可以接受你的答案在40秒內正確 – sidyll