匹配两个字段并具有另一个公共字段的MySQL查询

匹配两个字段并具有另一个公共字段的MySQL查询,mysql,sql,Mysql,Sql,我有这样一个SQL表: id | f1 | f2 1 | a | hi 2 | a | sup 3 | b | hi 我需要一个查询来获取f2=hi或f2=sup的行,但前提是f1在两行中的值相同。所以我的查询将获取id 1和id 2,但不是3 所以基本上这个- SELECT * FROM `table` WHERE (`f2` = 'hi' OR `f2` = 'sup') AND 'f1-is-the-same' 像这样的查询应该可以做到这一点 SELECT T1.i

我有这样一个SQL表:

id |  f1 | f2
 1 |  a  | hi
 2 |  a  | sup
 3 |  b  | hi
我需要一个查询来获取f2=hi或f2=sup的行,但前提是f1在两行中的值相同。所以我的查询将获取id 1和id 2,但不是3

所以基本上这个-

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

像这样的查询应该可以做到这一点

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'

我认为您应该像我一样检查join上的t1.id t2.id,否则它将连接具有相同id的行。@kibbee:看看WHERE子句。这两行也需要有两个不同的f2值,所以这里没有匹配同一行的危险。对不起,我错过了。我觉得这有点奇怪。现在我明白了。我最后不得不添加另一个字段:其中f2='hi'和newfield='blah'或f2='sup',这两个字段的效果更好
SELECT * FROM `table` as t1 
WHERE (`f2` = 'hi' OR `f2` = 'sup') 
  AND f1 in (select f1 from `table` where id <> t1.id)
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'