我在下面有以下数据示例,我希望得到c1
的所有值,c2
中的值为0',c3
中的值为“是”,但是只有我需要返回的值是那些条件为真的行,但只需要c3
中后续值为'ADMIN'的行。
我尝试了一个子查询,但我不认为我真的理解这些是如何工作的,因为我不断收到错误。不知道如何进行或思考。它似乎需要对同一个表进行双重查询才能得到我想要的结果?
开始数据
c1 | c2 | c3
------------
1 | 0 | Yes
1 | 4 | Admin
1 | 5 | Editor
2 | 10 | Reader
3 | -1 | Maybe
3 | 9 | Admin
3 | 13 | Editor
3 | 12 | User
4 | 0 | Yes
4 | 8 | Admin
4 | 2 | Admin
5 | 11 | Editor
5 | 16 | Admin
期望的结果
c1 | c2 | c3
------------
1 | 4 | Admin
4 | 8 | Admin
4 | 2 | Admin
答案 0 :(得分:0)
请尝试以下代码。
SELECT c1, c2, c3
FROM table
WHERE c3 = 'Admin' AND c1 IN
(SELECT c1, c2, c3
FROM table
WHERE c2 = 0 AND c3 = 'Yes')
答案 1 :(得分:0)
您可以使用JOIN
子查询结果:
SELECT *
FROM tbl t1
JOIN (
SELECT DISTINCT c1
FROM tbl
WHERE c2 = 0
AND c3 = 'Yes'
) t2 USING (c1)
WHERE t1.c3 = 'Admin';
如果(c2, c3)
有多个符合条件的行,则EXISTS
半联接应该更快:
SELECT *
FROM tbl t
WHERE c3 = 'Admin'
AND EXISTS (
SELECT 1
FROM tbl
WHERE c1 = t.c1
AND c2 = 0
AND c3 = 'Yes'
);