2011-10-17 52 views
2

另一場我有一個SQL表是這樣的:MySQL查詢匹配兩個領域,並在共同

id | f1 | f2 
1 | a | hi 
2 | a | sup 
3 | b | hi 

我需要抓住行的查詢,其中F2 = H,或者F2 =燮,但前提是兩行中的f1具有相同的值。所以我的查詢會抓住ID 1和ID 2,而不是3

所以基本上這一點 -

SELECT * FROM `table` WHERE (`f2` = 'hi' OR `f2` = 'sup') AND 'f1-is-the-same' 

回答

2
SELECT * 
    FROM YourTable t1 
     INNER JOIN YourTable t2 
      ON t1.f1 = t2.f1 
    WHERE t1.f2 = 'hi' 
     AND t2.f2 = 'sup' 
+0

完美,謝謝 –

+0

我想你應該檢查t1.id <> t2.id你加入(如我所做的),否則它會加入具有相同ID的行。 – Kibbee

+0

@kibbee:看看WHERE子句。這兩行也需要'f2'有兩個不同的值,所以在這裏沒有匹配同一行的危險。 –

1
SELECT * FROM `table` as t1 
WHERE (`f2` = 'hi' OR `f2` = 'sup') 
    AND f1 in (select f1 from `table` where id <> t1.id) 
+0

我最終不得不添加另一個字段: WHERE(('f2' ='hi'AND'newfield' ='blah')OR('f2' ='sup')) –

0

像這樣的查詢應該做的伎倆

SELECT T1.id,T1.F1,T2.F2 
FROM Table as T1 
INNER JOIN Table as T2 
ON T1.F1=T2.F1 AND T1.ID <> T2.ID 
WHERE T1.F2= 'hi' or T1.F1='sup'