sql中的子查询或多个查询得到结果

Subquery or multiple queries in sql to get results

我在下面有以下数据示例,我想获取 c1 的所有值,其中 c2 中的值为 0',[=15= 中的值为 'Yes' ],但我需要返回的唯一值是条件为真但只需要 c3 中后续值为 'ADMIN'.

的行

我试过子查询,但我不认为我真的理解它们是如何工作的,因为我不断收到错误。不确定如何继续或思考这个问题。似乎需要对同一个 table 进行双重查询才能获得我想要的结果?

起始数据

 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

请尝试下面的代码。

SELECT c1, c2, c3
FROM table
WHERE c3 = 'Admin' AND c1 IN
 (SELECT c1, c2, c3
  FROM table
  WHERE c2 = 0 AND c3 = 'Yes')

可以对子查询结果使用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'
   );