Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql中的子查询或多个查询以获取结果_Sql_Postgresql_Subquery - Fatal编程技术网

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

sql中的子查询或多个查询以获取结果,sql,postgresql,subquery,Sql,Postgresql,Subquery,我有下面的数据示例,我想获得c1的所有值,其中c2中的值为0,而c3中的值为“是”,但我需要返回的唯一值是该条件为真的行,但只需要c3中后续值为“ADMIN”的行 我尝试过一个子查询,但我不认为我真的理解这些子查询是如何工作的,因为我不断地遇到错误。不知道如何进行或思考。似乎需要对同一个表进行双重查询才能得到我想要的结果 开始数据 c1 | c2 | c3 ------------ 1 | 0 | Yes 1 | 4 | Admin 1 | 5 | Editor 2 | 10

我有下面的数据示例,我想获得
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

请尝试下面的代码

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

您可以使用
连接
子查询结果:

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)
有许多符合条件的行,则半联接应该更快:

SELECT *
FROM   tbl t
WHERE  c3 = 'Admin'
AND    EXISTS (
   SELECT 1
   FROM   tbl
   WHERE  c1 = t.c1
   AND    c2 = 0
   AND    c3 = 'Yes'
   );

显示查询以及您得到的错误?