2017-06-11 17 views
1

(PK/FK)の関係がない以下の構造のテーブルが2つあります。mysqlの同じ列を持つ複数のテーブルから削除する方法

======== 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 | 
+----+------+---------+-------+ 

私はcountry.idとcity.country_idを2つのテーブル間のリンクとして使用しています。私がしようとした

ERROR 1093 (HY000): You can't specify target table 'country' for update in FROM clause 

delete country , city from country, city where city.country_id = country.id and country.id in (select id from country where visible = 0); 

しかし、それは以下のエラーを返します:私は、コードのこの部分を思い付い検索した後、視認性の値は0です。国や都市を削除しようとしていますWHEREのような本で結合を使用:

DELETE country , city 
FROM country JOIN city 
ON city.country_id = country.id 
WHERE country.visible = 0 

それはうまくいったが、削除されなかった0の値を有しているものより多くの列があります。

======== Country ====== 
+----+-------+---------+ 
| id | name | visible | 
+----+-------+---------+ 
| 2 | mmm |  1 | 
| 3 | ttt |  1 | 
| 4 | kkkkk |  0 | 
+----+-------+---------+ 

答えて

0

どこにでもJOINを使用すると、はるかに明確になります。あなたのサンプルデータに

DELETE country , city 
FROM country JOIN city 
ON city.country_id = country.id 
WHERE country.visible = 0 

可視とKKK行それが結合にピックアップさwon`tよう都市テーブルに存在doenst 4のIDを有するので= 0を削除することが習慣。私は再びあなたのコードを確認した後、WHERE、それは次のように働いていた私はちょうど追加

+0

、それでも国のために値0をしている1つのより多くの価値があり、その結果を参照してください。以下: + ---- + ------- + --------- + | id |名前|見える| + ---- + ------- + --------- + | 2 | mmm | 1 | | 3 | ttt | 1 | | 4 | kkkkk | 0 | + ---- + ------- + --------- + – Kamal

+0

@Kamal明確ではありませんが、私はLEFT結合が必要だと思います。 – Mihai

+0

LEFT JOINでは、郡のテーブルのすべてのデータが削除されました。 – Kamal

1

@Mihai:それは働いた

DELETE country, city 
FROM country 
LEFT JOIN city 
ON city.country_id = country.id 
WHERE country.visible = 0; 
関連する問題