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