スコープは内側のサブクエリまで拡張されていますが、テーブルのクローンを作成しようとしています。あなたが動作しますDT
DT.id
のような範囲を見ることができるようにあなたが誘導体化し、テーブルのクローンを作成しようとすると、問題がある:より良いWITH
WITH cte as (
SELECT ID, Name
FROM ....
)
SELECT *
FROM cte as DT
WHERE NOT EXISTS (SELECT 1
FROM cte AS DT2
WHERE DT.ID=DT2.ID
AND DT2.Name='A')
提案を使用してexists()
で
あなたは(SELECT ID, Name FROM ....) AS DT
使用しますが、ある可能性がありあなたは傾けることができます。ドアの裏にはこれがまさにCTE
のものです。
SELECT *
FROM (SELECT ID, Name
FROM ....) as DT
WHERE NOT EXISTS (SELECT 1
FROM (SELECT ID, Name
FROM ....) AS DT2
WHERE DT.ID=DT2.ID
AND DT2.Name='A')
CTEの他にこれを実現する方法はありますか?私はこの技法を認識していますが、私の最後の限界に基づいて選択肢を模索していました。実際に派生したテーブルコードははるかに大きく、Exists内部でそれを再利用するとコードが巨大になります。 – AS91
はい、ここで説明します。 'exists'の中で' DT'クエリを書き直す必要があります。あなたの限界は何ですか? –
@JuanCarlosOropeza +1 bien hecho –