2016-05-10 8 views
0

私は、次のような表がある場合:削除クエリ - mysqlの

私が必要とすることは、私が行う場合NAME2 = E

含まれているIDのすべての行を削除している

 name1  | name2  | id  | 
+----------------+--------------+-----------+ 
| A    | E   | 1   | 
| A    | F   | 1   | 
| B    | G   | 1   | 
| C    | H   | 1   | 
| D    | I   | 1   | 
| A    | J   | 2   | 
| B    | K   | 2   | 
| C    | L   | 2   | 
| D    | M   | 2   | 
| A    | N   | 2   | 

delete from table where name2 = E 

それだけで私にこの

 name1  | name2  | id  | 
+----------------+--------------+-----------+ 
| A    | F   | 1   | 
| B    | G   | 1   | 
| C    | H   | 1   | 
| D    | I   | 1   | 
| A    | J   | 2   | 
| B    | K   | 2   | 
| C    | L   | 2   | 
| D    | M   | 2   | 
| A    | N   | 2   | 

Rを与えます私がしたいと思うesultは次のとおりです:

 name1  | name2  | id  | 
+----------------+--------------+-----------+ 
| A    | J   | 2   | 
| B    | K   | 2   | 
| C    | L   | 2   | 
| D    | M   | 2   | 
| A    | N   | 2   | 

どのクエリを使用しますか?

+1

えっか?あなたの質問には相反する要件があります。 name2 = Eを含むすべての行を削除したいが、希望する結果の表でF、G、H、およびIが削除されている。両方の方法を使用することはできません。 –

答えて

3

私はあなたがこのような何かをしたいと思う:

delete t 
    from table t join 
     table t2 
     on t.id = t2.id and t2.name2 = 'E'; 

これはname2'E'ある行とIDを共有テーブルからすべての行を削除します。他のほとんどのデータベースで

、あなたが書くことができます:existsを使用して

​​

または類似のものを。残念ながら、MySQLはサブクエリが変更されるテーブルを参照するため、この構文を許可しません。ハックがあります:

delete t from table t 
    where t.id in (select id from (select t2.id from table t2 where t2.name2 = 'E') t); 

joinのバージョンが好きです。 selectについては

、私はどうなる:

select t.* 
from table t 
where t.id in (select t2.id from table t2 where t2.name2 = 'E'); 

か:

select t.* 
from table t 
where exists (select 1 from table t2 where t2.name2 = 'E' and t2.id = t.id); 
+0

MySQLサブクエリの制限があります。 –

+0

削除の代わりに選択をしたいのですが、どうすればいいですか? :) – dPdms

+0

今のところ立っているように、質問は単一のテーブルについて質問します。これまでに2つのテーブルについて言及しましたか? –