zoukankan      html  css  js  c++  java
  • 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表的数据不会删除)

  • 相关阅读:
    ftp上传下载
    java生成xml
    Java:删除某文件夹下的所有文件
    java读取某个文件夹下的所有文件
    JFileChooser 中文API
    得到java异常printStackTrace的详细信息
    关于SQL命令中不等号(!=,<>)
    ABP前端保存notify提示在Edge浏览器显示null
    关于MY Sql 查询锁表信息和解锁表
    VS2019 backspace键失效,无法使用
  • 原文地址:https://www.cnblogs.com/xiaolaodi1999/p/14989840.html
Copyright © 2011-2022 走看看