今天看公司代码看到这条SQL语句,感觉挺有意思,之前从未使用过的Using关键词。
DELETE FROM tve USING TRIPS_VERIFICATION tve,TRIP t WHERE tve.TRIP_ID=t.ID AND t.SERVICE_DAY = ?
百度后发现只有USING()函数的用法,并没有单独的USING关键词的使用。
mysql中using的用法为:
using()用于两张表的join查询,要求using()指定的列在两个表中均存在,并使用之用于join的条件。
示例:
select a.*, b.* from a left join b using(colA);
等同于:
select a.*, b.* from a left join b on a.colA = b.colA;
根据SQL猜测这条语句的主要目的是:A 连B表,根据B表的条件,删除A表的数据(B表的数据不会删除)。
验证:
新建student表(id,姓名,性别)
新建socre表(id,成绩,学生id)
操作1:删除成绩为90的学生信息(A 连B表,根据B表的条件,删除A表的数据)
按照自己想法写的SQL:
DELETE FROM student t LEFT JOIN score s ON t.id = s.st_id WHERE s.score = 90;
发现语句报错(可能是自己本身SQL有问题,或者本来也不支持这样的操作):
模仿着公司的代码写SQL:
DELETE FROM t USING student t ,score s WHERE t.id = s.st_id AND s.score = 90;
发现执行成功(Affected rows: 1):
1、score表数据没有删除
2、成绩为90的student信息删除了
再次验证:
操作2:删除score表中,性别为‘m’的数据。
SQL:
DELETE FROM s USING student t,score s WHERE t.id = s.st_id AND t.sex ='m';
执行后发现性别为m的所有数据被删除了:
因此验证:A 连B表,根据B表的条件,删除A表的数据(B表的数据不会删除)