2013-03-14 31 views
0

我以爲我有一個非常簡單的查詢來執行,但我似乎無法使其工作。無法在MAMP上的2列上應用WHERE/AND WHERE/AND

我有這樣的表2列:

version_id  trim_id 
    1    15 
    1    25 
    1    28 
    1    30 
    1    35 
    2    12 
    2    25 
    2    33 
    2    48 
    3    11 
    3    25 
    3    30 
    3    32 

我試圖讓任何版本的id有說子集trim_id年代。比方說,有trim_id的25和30我明顯的企圖是所有VERSION_ID的:

SELECT * FROM table WHERE trim_id=25 AND trim_id=30 

我期待有VERSION_ID 1和3的結果,而是我什麼也沒得到。

我與最新版本MAMP,其中有一些奇怪的行爲,就像在這種情況下,它只是告訴我它「正在載入」工作,從來沒有給我一個錯誤信息或東西。但是當沒有數據要返回時通常就是這種情況。

這是InnoDB,如果有幫助。

感謝您的輸入。

回答

1

您的查詢不工作,因爲你正在使用ANDtrim_id不能在同一時間兩個不同的值,所以你需要申請Relational Division得到的結果。

您將需要使用類似以下內容:

SELECT version_id 
FROM yourtable 
WHERE trim_id in (25, 30) 
group by version_id 
having count(distinct trim_id) = 2 

SQL Fiddle with Demo

這將返回version_id值同時具有2530。然後,如果你想以包括最終結果附加列,您可以展開查詢:

select t1.version_id, t1.trim_id 
from yourtable t1 
where exists (SELECT t2.version_id 
       FROM yourtable t2 
       WHERE t2.trim_id in (25, 30) 
       and t1.version_id = t2.version_id 
       group by t2.version_id 
       having count(distinct t2.trim_id) = 2); 

SQL Fiddle with Demo

+0

非常感謝,bluefeet。這就是訣竅!我懷疑AND並不適用,但需要幾代人才能到達關係部的事情。你爲我節省了很多時間。如果可以的話,1000分給你。 – BernardA 2013-03-14 11:01:49

+0

@BernardA樂意幫忙! :) – Taryn 2013-03-14 11:03:11

0
SELECT * 
FROM table 
WHERE trim_id IN(25,30) 
+0

謝謝Raheel,但是這不是我所期待的。查詢的結果是version_id的1,2,3,因爲所有的版本都有25或30. Version_id 2的確有25但不是30.我需要version_id的版本號爲25和30.在這個例子中,version_id的版本號爲1和3. – BernardA 2013-03-14 10:35:14