这是怎样的一个复杂的问题,但...MySQL的 - 需要选择只在一个ID,也有另一列
我的数据设置为两种可能的数行
id col1
1 15
1 30
2 15
2 15
我只需要选择行中的一个id,col1在表中的值都是15和30。所以在这种情况下,我需要查询返回1,因为id = 2在col1中只有15个。
这是怎样的一个复杂的问题,但...MySQL的 - 需要选择只在一个ID,也有另一列
我的数据设置为两种可能的数行
id col1
1 15
1 30
2 15
2 15
我只需要选择行中的一个id,col1在表中的值都是15和30。所以在这种情况下,我需要查询返回1,因为id = 2在col1中只有15个。
您必须确保这两个值: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示例只是为了检查它。
这几乎工作 - 我结束了内部连接使用子选择语句。 WHERE ID中(从foo1 F1 选择不同ID 内部联接foo1 F2上(f1.id = f2.id和f2.col1 = 15) 内连接上(f1.id = f3.id和f3 foo1 F3 .col1 = 30)您的回应 两点意见(这些都是尼特挑剔,但只是为新人):存在 - >存在 的连接上应该有()周围时,有一个“和” 谢谢你非常感谢你的回应!它帮了我很多:) –
这个怎么样?通过具有count(id)= 2的id从select(select distinct id,col1 from t)中选择id作为一个组; – Shiping