MySQLでdeleteとexistを組み合わせてデータを削除

623 ワード

EXISTSは、サブクエリが少なくとも1行のデータを返すかどうかをチェックするために使用されます.このサブクエリは、実際にはデータを返さず、値TrueまたはFalseを返します.
誤った使い方:
delete from TableA
 where exists 
 (
 select a.*
 from TableA a, TableB b 
 where a.aname = b.bname and a.asex = b.bsex
 )

このやり方は間違っている.この文の意味は:ABの2つの表が同じ名前の記録があるかどうかを判断して、もしあるならば、A表を削除して、すべての記録を削除して、同じ名前のあれらの記録ではありません!
だから、Existsは真偽を判断するだけだと覚えておいてください.selectとdeleteにフィルタを指定することはできません.
正しい使い方:
delete TableA 
from TableA a  inner join TableB  b    
on  a.aname = b.bname and a.asex = b.bsex 

注意、left joinを使わないでください、左で接続するため、A表はやはりすべてリストして、依然としてすべて削除されます