2017-02-24 110 views
0

这是怎样的一个复杂的问题,但...MySQL的 - 需要选择只在一个ID,也有另一列

我的数据设置为两种可能的数行

id   col1 

1   15 

1   30 

2   15 

2   15 

我只需要选择行中的一个id,col1在表中的值都是15和30。所以在这种情况下,我需要查询返回1,因为id = 2在col1中只有15个。

+0

这个怎么样?通过具有count(id)= 2的id从select(select distinct id,col1 from t)中选择id作为一个组; – Shiping

回答

3

您必须确保这两个值:15和30存在于COL1。

首先查询使用EXISTS,以确保这两个条件都满足,EXISTS如果子查询返回的行返回true一个布尔值,否则返回false。第二个子查询使用INNER JOIN两次与本身。仅与具有COL1 = 15相同ID和COL1 = 30。

结果返回行是相同的。

SELECT id 
FROM foo1 f1 
WHERE EXIST (SELECT 1 FROM foo1 WHERE id = f1.id AND col1 = 15) 
AND  EXISTS (select 1 from foo1 where id = f1.id and col1 = 30); 


SELECT  id 
FROM  foo1 f1 
INNER JOIN foo1 f2 ON f2.id = f1.id AND col1 = 15 
INNER JOIN foo1 f3 ON f3.id = f1.id AND col1 = 30; 

我设置了一个dbfiddle示例只是为了检查它。

+0

这几乎工作 - 我结束了内部连接使用子选择语句。 WHERE ID中(从foo1 F1 选择不同ID 内部联接foo1 F2上(f1.id = f2.id和f2.col1 = 15) 内连接上(f1.id = f3.id和f3 foo1 F3 .col1 = 30)您的回应 两点意见(这些都是尼特挑剔,但只是为新人):存在 - >存在 的连接上应该有()周围时,有一个“和” 谢谢你非常感谢你的回应!它帮了我很多:) –

相关问题