2011-10-17 56 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'