4 sql
我有以下查询:
select A,
B
from table1
where A in (select c
from table 2
)
Run Code Online (Sandbox Code Playgroud)
但是,现在我需要更改此查询并使用exists而不是in,它应该给出相同的结果.
我的表格如下所示:
table1 table2
A B c
------ -----
1 x 1
2 y 3
3 z 4
4 w 7
5 a
1 b
Run Code Online (Sandbox Code Playgroud)
我该如何使用该exists功能?
Eri*_*ric 12
您需要匹配将exists在一起使用的两列:
select
t1.a, t1.b
from
table1 t1
where
exists (select 1 from table2 t2 where t2.c = t1.a)
Run Code Online (Sandbox Code Playgroud)
您必须这样做的原因是因为exists在表上执行半连接,因此需要具有连接条件.
更改表达式:
FROM Table1 WHERE a IN( SELECT c FROM Table2 )
Run Code Online (Sandbox Code Playgroud)
一个EXISTS是一个简单的问题:
WHERE在内部的末尾添加一个SELECT
FROM Table1 WHERE a IN( SELECT c FROM Table2 WHERE )
Run Code Online (Sandbox Code Playgroud)将外部匹配列(a)移到内部SELECT的WHERE子句中
FROM Table1 WHERE IN( SELECT c FROM Table2 WHERE a )
Run Code Online (Sandbox Code Playgroud)将内部匹配列(c)移动到该WHERE子句,保留列占位符(常量或*):
FROM Table1 WHERE IN( SELECT * FROM Table2 WHERE a = c )
Run Code Online (Sandbox Code Playgroud)更改IN为EXISTS:
FROM Table1 WHERE EXISTS( SELECT * FROM Table2 WHERE a = c )
Run Code Online (Sandbox Code Playgroud)为了安全起见,将表名添加到外部列上:
FROM Table1 WHERE EXISTS( SELECT * FROM Table2 WHERE Table1.a = c )
Run Code Online (Sandbox Code Playgroud)