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

时间:2015-03-31 04:20:55

标签: sql postgresql subquery

我在下面有以下数据示例,我希望得到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

2 个答案:

答案 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'
   );
相关问题