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'
);
我在下面有以下数据示例,我想获取 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'
);