2014-07-24 99 views
3

嗨,我有一個小問題,我找不到解決方案。我在MySql中很新。WHERE和AND在MySQL查詢

比方說我有這個表:

_______________ 
|prodID| |propID| 
|________|______| 
| 1 | 2 | 
| 1 | 5 | 
| 2 | 6 | 
| 2 | 7 | 
| 3 | 5 | 
| 3 | 2 | 
| 3 | 9 | 
| 4 | 5 | 
| 4 | 3 | 
| 5 | 2 | 
| 5 | 5 | 
|________|______| 

PRODID是Product-ID和PROPID是物業-ID。
現在我想要的產品,例如具有屬性propID = 2 和屬性propID = 5。如果propID = 2中的財產是「由玻璃製成」且propID = 5是「對於兒童安全」。我希望我得到的產品(prodID)都是。 「由玻璃製成,適合兒童使用」。所以,我會得到propIDs是1,3和5

這並沒有爲我工作:

SELECT prodID FROM table WHERE propID=2 AND propID=5 

我希望這是清楚了我的意思,並希望有人能幫助我。

由於

編輯:

表現在更改在PRODID = 4。 如果我想嘗試

SELECT prodID FROM table WHERE propID=2 OR propID=5 

我會得到1,3,4和5,但是,這不是我想要的。

+0

我沒有得到玻璃和安全的兒童部分 –

+0

'在哪裏PROPID = 2或propID = 5' –

+0

@先生alien例如一個嬰兒奶瓶 – josepchappa

回答

5

您需要查詢的是:

SELECT 
    prodID 
FROM 
    t 
WHERE 
    propID IN (2,5) 
GROUP BY 
    prodID 
HAVING 
    COUNT(DISTINCT propID)=2 

此外,請注意,它的 「正好2屬性」。如果您在結果中需要「至少」屬性中的「2」和「5」,則將COUNT(DISTINCT propID)=2更改爲COUNT(DISTINCT propID)>=2。檢查這fiddle

0

這些都將不是你更新後的工作

試試這個 SELECT DISTINCT PRODID FROM表WHERE PROPID = 2或PROPID = 5 另一種方式來做到這一點是這樣的 SELECT DISTINCT PRODID FROM表WHERE PROPID IN (2,5)

編輯:

試試這個,而不是

SELECT prodID FROM table WHERE propID=2 OR propID=5 GROUP BY prodID HAVING COUNT(DISTINCT prodID) = 2 

注意:如果您要使用此查詢接受AlmaDo的答案,因爲它是我的建議之前。

,你可以使用子查詢

SELECT prodID FROM (
SELECT prodID, COUNT(DISTINCT prodID) as filter_col FROM myTable 
WHERE propID IN(2,5) 
GROUP BY prodID 
)t 
WHERE filter_col = 2; 

DEMO

+0

我不認爲這是他所需要的。他只需要propid = 2和propid = 5的產品。問題在於表格沒有正常化。 – kiks73

+0

@ kiks73你看過我發佈的演示了嗎?它是做什麼他要求 –

+0

這與OP需要 –

0

你想使用或代替去做。並且查找兩個條件都返回爲真的記錄,在這種情況下沒有。 OR將會返回其中任何一個都是真的記錄。

0

既然你想這兩個條件是真的OR不起作用。

解決方法是將表與itslef連接起來,然後添加where條件。

SELECT t1.prodID 
FROM table t1 
INNER JOIN table AS t2 ON t1.prodID = t2.prodID AND t2.propID = 2 
WHERE t1.propID = 5 

但是可能有更好的解決方案。

0

這也會起作用:使用子查詢過濾具有一個屬性的產品,然後使用其他屬性過濾這些產品。 fiddle

SELECT DISTINCT T.PRODID 
FROM T INNER JOIN (SELECT PRODID FROM T WHERE PROPID=2) AS TABLE2 
ON T.PRODID = TABLE2.PRODiD 
WHERE T.PROPID = 5 
0

試試這個

SELECT prodID FROM table WHERE (propID=2 OR propID=5) 
+2

這將有助於解釋爲什麼你的查詢工作和OP的沒有。 – Kryten

+0

OP特別提到這並沒有給出預期的結果。 – cpburnz

+0

他的循環可能不正確。或者他沒有做出循環或結果。 – ivanfromer

1

要麼與counthaving,或:

select * from products 
where (
    select count(distinct propID) from pivot_table where products.ID = pivot_table.prodID 
    and pivot_table.propID IN (2,5) 
) = 2 

IN(..)一部分,= 2應該是動態的,根據您的需要。


distinct將解決重複的問題,但是@Alma做了更好的解決方案,這需要依賴無子查詢簡單查詢。