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'
);
显示查询以及您得到的错误?