NOT EXIST(mysql)

06-01 1294阅读

        在报表开发实践中,因为查询逻辑复制,经常会用到NOT EXIST这种操作,有时候,结果是对的,但是查询效率却不尽如人意。

        重新认识NOT EXIST :

        在MySQL中,"NOT EXIST"通常用于查询操作,它是"EXIST"关键字的反面,用于检查一个子查询是否不返回任何行。

"NOT EXIST"通常在"SELECT", "INSERT" 或 "UPDATE"语句中使用,它可以用来检查主表中的一行是否不存在于子查询结果中。

        1.查询一个表中的数据,但在另一个表中不存在。如查询没有子表数据的主表数据。

        

SELECT *
FROM tableA
WHERE NOT EXISTS (SELECT 1 FROM tableB WHERE tableA.id = tableB.id);

        2.将不存在与第二张表的数据插入到指定表中

INSERT INTO tableA (column1, column2)
SELECT column1, column2
FROM tableB
WHERE NOT EXISTS (SELECT 1 FROM tableC WHERE tableC.id = tableB.id);

        3.更新操作

UPDATE tableA
SET tableA.column1 = '1'
WHERE NOT EXISTS (SELECT 1 FROM tableB WHERE tableA.id = tableB.id);

        注意:在使用"NOT EXIST"时,子查询应尽可能高效,因为它可能会导致全表扫描。如果可能,最好使用JOIN或其他方法替代"NOT EXIST",以提高查询效率。

        NOT EXIST的一些替代方案:

        MySQL中使用NOT EXISTS进行子查询优化时,可以考虑以下几种方法:

  1. 使用LEFT JOIN代替NOT EXISTS,并在WHERE子句中加上对左连接结果为NULL的判断。

  2. 对于简单的查询,可以考虑使用NOT IN代替NOT EXISTS。

  3. 对于返回结果集较大的子查询,可以考虑先将子查询的结果集临时保存到一个临时表中,然后再对这个临时表进行查询。

        NOT IN 替代

NOT EXIST(mysql)
(图片来源网络,侵删)
SELECT a.*
FROM table1 a
WHERE a.id NOT IN (SELECT b.id FROM table2 b);

       LEFT JOIN 替代

SELECT a.*
FROM table1 a
LEFT JOIN table2 b ON a.id = b.id
WHERE b.id IS NULL;

   实践中,若子查询较为复杂LEFT JOIN 方式更高效

NOT EXIST(mysql)
(图片来源网络,侵删)
NOT EXIST(mysql)
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码