15

よくある問題だと思うので、これを投稿するのは本当に気が進まなかったのですが、この状況に当てはまる答えを見つけることができないようです... (たぶん私は本当に悪いグーグルです)。

table1 と table2 という 2 つの同一のテーブル (データではなく列単位) があります。両方のテーブルに複合キー (col1、col2) が存在する table1 のレコードを削除したいと考えています。これが私が持っているもので、私には正しいようですが、エラーが発生しています。

DELETE FROM Table1
WHERE (**Col1**, Col2) IN
(SELECT Col1, Col2
FROM Table1 a
JOIN Table2 b
    ON a.Col1 = b.Col1
    AND a.Col2 = b.Col2)

エラー:

メッセージ 4145、レベル 15、状態 1、行 212 ',' の近くで、条件が予想されるコンテキストで指定された非ブール型の式。

*コードの「赤いエラーの波線」のある部分を2 つ囲みました。

4

3 に答える 3

23

これは、以下を使用してきれいに実行できJOINますDELETE

DELETE a
FROM 
    Table1 a 
    JOIN Table2 b
        ON a.Col1 = b.Col1
        AND a.Col2 = b.Col2
于 2012-11-19T23:09:26.377 に答える
10

どの DBMS ですか? 口頭の場合は、ペアごとの比較が機能するはずです。

DELETE FROM Table1
WHERE (Col1, Col2) IN
(SELECT Col1, Col2
 FROM Table2)

SQL サーバーの場合は、Michael のソリューションが機能するはずです。

于 2012-11-19T23:14:55.527 に答える
1

どちらの答えも一般的なケースをカバーしていないので、私のものを入れます:

フィールドを 1 つのフィールドに連結する必要があります。

元。:

DELETE FROM Table1 
WHERE concat(Col1,'******',Col2) 
 IN (SELECT concat(a.Col1,'******',b.Col2) 
FROM Table1 a 
JOIN Table2 b
ON a.Col1 = b.Col1
AND a.Col2 = b.Col2))
于 2021-01-18T19:09:32.043 に答える