2013-09-24 64 views
0

我需要執行一個查詢基於1場是發現價值,如果第二場是相同查找與列的值相同的行

示例表:

id, what, why 
1, 2, 2 
2, 3, 4 
3, 3, 2 

所以我希望結果返回什麼2和3,因爲他們都有爲什麼2.

但爲什麼(2)是未知的,所以我只知道什麼是什麼(2和3)具有相同的原因值的組合。說得通?任何幫助表示感謝。

另一個例子或許更清晰

id, building, color 
1, house, white 
2, garage, red 
3, garage, white 

我查詢哪裏,如果他們匹配顏色的建築=房屋建築物=車庫和結果僅給出。

+1

你想選擇那些有爲什麼2? –

+0

沒有意義。提供更多樣本數據和預期產出。 – gvee

回答

1

使用自聯接。

SELECT t1.what 
FROM Table t1 
JOIN Table t2 
ON t1.why = t2.why and t1.what != t2.what 
+0

添加WHERE t1.what = $ value1 AND t2.what = $ value2因爲我只需要匹配原因的特定結果。 – John

3
SELECT what 
FROM YourTable A 
WHERE EXISTS(SELECT 1 FROM YourTable 
      WHERE what <> A.what 
      AND why = A.why) 

Here is a demo這個。

0

會是這樣的工作:

SELECT GROUP_CONCAT(what) as what, why 
FROM YourTable 
GROUP BY why 
HAVING COUNT(*) > 1 

DEMO:http://sqlfiddle.com/#!2/62da8/5

+0

'GROUP_CONCAT'?好吧,但是這個默認值是1024,如果它更長並且不能在MySQL中更改設置,將會是一個問題。 – mkjasinski

+0

@mkjasinski:這只是一個想法。我不太確定OP想要什麼。 –

+1

您需要一個'HAVING COUNT(*)> 1'來防止顯示沒有重複的值。 – Barmar

2

你可以這樣說:

select * 
from test 
where why in (
    select why 
    from test 
    group by why 
    having count(*) > 1 -- Use = 2 if you want exactly two items 
) 

Demo on sqlfiddle.

內部查詢查找所有這些why s有重複,並使用它們值來過濾外部查詢的行。

相關問題