2017-06-29 17 views
0

から更新のターゲット表を指定することはできません、私は次の表は、MySQLデータベース内tbl_testと呼ばれています:英語では、このMySQLのエラーを解決する必要があります:あなたは、FROM句

+------+----------+ 
| user | dob | 
+------+----------+ 
| john | 1/10/96 | 
| jane | 3/4/97 | 
| jill | 1/8/96 | 
| jack | 2/9/00 | 
| jane | 12/14/07 | 
| john | 1/11/98 | 
+------+----------+ 

、ここで私が達成したいものです:

dobを持つすべてのユーザーを削除します。1/1/00ただし、dob> = 1/1/00の同じ名前の別のユーザーが存在する場合は、ユーザーを保持してください。

この例では、johnsとjillは削除され、janesとjackは残ります。

私はこれを行うには、次のSQLコマンドを作ってみた:

DELETE from tbl_test 
WHERE dob < '2000-01-01' 
AND name NOT IN (SELECT name from tbl_test WHERE dob >= '2000-01-01') 

をとMySQLは、このエラーがスローされます:あなたは、FROM句に更新のターゲット表「tbl_test」を指定することはできません。

上記のコマンドを変更して正当なものにするにはどうすればよいですか?

答えて

0

あなたが検索に使用するのと同じテーブルを削除することはできません。このトリック

DELETE from tbl_test 
    WHERE dob < '2000-01-01' 
    AND name NOT IN (select T.name 
         from (SELECT name 
           from tbl_test WHERE dob >= '2000-01-01') T) 

MySQLを使用することができますが、あなたはので、これは、この制限を超えて行くことができるdinamically一時テーブルを作成するために強制することができ

0

これに通常の修正はleft joinを使用することです:

DELETE t 
    FROM tbl_test t LEFT JOIN 
     tbl_test tt 
     ON t.name = tt.name and tt.dob >= '2000-01-01' 
    WHERE t.dob < '2000-01-01' AND 
      tt.name IS NULL; 
0
DELETE from user 
WHERE name IN (Select name from user where dob < 946684800) 
AND name not in (Select name from user where dob > 946684800); 

変更現在までの数は当時のリソースが限られていました。

関連する問題