2013-09-24 68 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有重复,并使用它们值来过滤外部查询的行。

相关问题