2016-09-12 9 views
0

特定のx値が同じテーブル内の任意の行のy値と一致する場合は、行を削除します。SQL削除行の値が異なる列の値と一致する

例:

| x | y | 
| 4 | 2 | 
| 2 | 6 | 
| 8 | 1 | 
| 3 | 1 | 
| 7 | 8 | 
| 9 | 5 | 

になるでしょう:

| x | y |  
| 4 | 2 | 
| 3 | 1 | 
| 7 | 8 | 
| 9 | 5 | 
+0

そして、あなたがこれまでに試してみましたか?どのSQLのフレーバーを使用していますか? – SMA

答えて

1

あなたのDBがそれを可能にした場合、自己結合が働くことがあります。

DELETE FROM foo AS xside 
LEFT JOIN foo AS yside ON xside.y = yside.x 
+0

RDBMSの中には、行が複数回削除される原因となる結合が気に入らないものがあります。この場合、GROUP BYまたはDISTINCTを使用してysideのサブクエリが役に立ちます。 mysqlの場合は – MatBailie

+0

、これが唯一の方法です。変更しているテーブルで(サブ)選択を行うことはできませんが、結合は機能します。 –

+0

申し訳ありませんが、私は 'LEFT JOIN(サブクエリー)と同じような意味です ' – MatBailie

1
Delete from tab where x in (select y from tab) 

代替バージョンカウンターへy列のヌル値。

Delete from tab t where exists (select 1 from tab ta where ta.y = t.x) 
+2

http://stackoverflow.com/questions/173041/not-in-vs-not-exists – Matt

+0

http://stackoverflow.com/questions/32175497/mysql -not-in-query-3-tables – Matt

+0

@Matt - 'NULL'問題は、私の意見では、' IN'を避ける最強の理由です。いくつかのRDBMSは他のものよりも最適化されていますが、すべてがあなたに噛み付きます。 – MatBailie

2

使用EXISTS

Delete from 
yourtable where exists (select 1 from tab b where b.y =yourtable.x) 
関連する問題