(PK / FK) の関係がない以下の構造の 2 つのテーブルがあります。
======== country =======
+----+-------+---------+
| id | name | visible |
+----+-------+---------+
| 1 | kkk | 0 |
| 2 | mmm | 1 |
| 3 | ttt | 1 |
| 4 | kkkkk | 0 |
+----+-------+---------+
============ city =============
+----+------+---------+-------+
| id | name | visible | c_id |
+----+------+---------+-------+
| 3 | k333 | 0 | 1 |
| 2 | k222 | 1 | 1 |
| 1 | kkk | 1 | 1 |
| 4 | k444 | 0 | 2 |
| 6 | k666 | 0 | 2 |
+----+------+---------+-------+
2 つのテーブル間のリンクとして country.id と city.country_id を使用しています。可視性の値が 0 の国と都市を削除しようとしています。検索した後、次のコードを思い付きました。
delete country , city from country, city where city.country_id = country.id and country.id in (select id from country where visible = 0);
しかし、それは以下のエラーを返します:
ERROR 1093 (HY000): You can't specify target table 'country' for update in FROM clause
次のような WHERE で JOIN を使用しようとしました。
DELETE country , city
FROM country JOIN city
ON city.country_id = country.id
WHERE country.visible = 0
うまくいきましたが、値が 0 の行がもう 1 つあり、削除されませんでした。
======== Country ======
+----+-------+---------+
| id | name | visible |
+----+-------+---------+
| 2 | mmm | 1 |
| 3 | ttt | 1 |
| 4 | kkkkk | 0 |
+----+-------+---------+
JOIN を WHERE とともに使用すると、より明確になります。
DELETE country , city
FROM country JOIN city
ON city.country_id = country.id
WHERE country.visible = 0
サンプル データでは、visible=0 の kkk 行は、都市テーブルに存在しない ID が 4 であるため、削除されないため、結合で選択されません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加