MySQL USING关键词/USING()函数的使用

今天看公司代码看到这条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表的数据不会删除)

posted @ 2021-07-09 11:29  小老弟1999  阅读(2549)  评论(0编辑  收藏  举报