に存在しますはに変更すると、私は次のクエリを持っているSQL
私のテーブルには、次のようになります。
table1 table2
A B c
------ -----
1 x 1
2 y 3
3 z 4
4 w 7
5 a
1 b
はどのようexists
機能を使用していますか?
に存在しますはに変更すると、私は次のクエリを持っているSQL
私のテーブルには、次のようになります。
table1 table2
A B c
------ -----
1 x 1
2 y 3
3 z 4
4 w 7
5 a
1 b
はどのようexists
機能を使用していますか?
は、あなたが一緒にexists
に使用される2つの列を一致させる必要があります。
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
:EXISTS
に
FROM Table1 WHERE a IN(SELECT c FROM Table2)
は、の単純な問題である:
内部SELECT
FROM Table1 WHERE a IN(SELECT c FROM Table2 WHERE)
WHERE
を追加
内部SELECT
のWHERE
句
FROM Table1 WHERE IN(SELECT c FROM Table2 WHERE a)
に外部の一致列(A)を移動列のプレースホルダ(定数または*)を残し、WHERE
句内部一致列(B)を移動:
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)
あなたのコードフォーマットを修正;) – LukeH
ありがとうございました。もし私がそれを理解することができたら、夢中になる... – RBarryYoung
THANX EVERY ONE –
これは... Oracleのように見えますが、あなたが使用しているDBMSを指定pleeeeeeease !! – guigui42