5239ZM 2024-02-27 11:57 采纳率: 0%
浏览 6

多个EXISTS对同一张表操作的逻辑

MySQL中,以下两句SQL执行结果不同,多个EXISTS对同一张表操作的逻辑是什么?

SELECT * FROM street WHERE 1 = 1
AND EXISTS(SELECT 1 FROM t_user_bigdata WHERE u_address = street.id
AND u_username LIKE '%12%' AND u_password LIKE '%23%' AND u_nickname LIKE '%34%')

SELECT * FROM street WHERE 1 = 1
AND EXISTS(SELECT 1 FROM t_user_bigdata WHERE u_address = street.id AND u_username LIKE '%12%')
AND EXISTS(SELECT 1 FROM t_user_bigdata WHERE u_address = street.id AND u_password LIKE '%23%')
AND EXISTS(SELECT 1 FROM t_user_bigdata WHERE u_address = street.id AND u_nickname LIKE '%34%')
  • 写回答

4条回答 默认 最新

  • GISer Liu 2024-02-27 11:58
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    首先,让我们逐步分析两个查询语句的区别,以理解它们的逻辑差异。
    第一个查询语句是:
    sqlCopy code

    SELECT * FROM street 
    WHERE 1 = 1 
    AND EXISTS(
    SELECT 1 
    FROM t_user_bigdata 
    WHERE u_address = street.id 
    AND u_username LIKE '%12%' 
    AND u_password LIKE '%23%' 
    AND u_nickname LIKE '%34%'
    );
    

    第二个查询语句是:
    sqlCopy code

    SELECT * FROM street 
    WHERE 1 = 1 
    AND EXISTS(
    SELECT 1 
    FROM t_user_bigdata 
    WHERE u_address = street.id 
    AND u_username LIKE '%12%'
    ) 
    AND EXISTS(
    SELECT 1 
    FROM t_user_bigdata 
    WHERE u_address = street.id 
    AND u_password LIKE '%23%'
    ) 
    AND EXISTS(
    SELECT 1 
    FROM t_user_bigdata 
    WHERE u_address = street.id 
    AND u_nickname LIKE '%34%'
    );
    

    这两个查询语句都在street表中查询符合条件的行,但它们使用了不同的EXISTS子查询来进行条件筛选。
    第一个查询语句中的EXISTS子查询包含了所有三个条件:u_username LIKE '%12%'u_password LIKE '%23%'u_nickname LIKE '%34%',这意味着只要在t_user_bigdata表中找到一行数据满足这三个条件,就会返回street表中对应的行。
    而第二个查询语句将这三个条件分别放在了不同的EXISTS子查询中。这意味着必须在t_user_bigdata表中找到至少一行数据,它的u_username满足'%12%'u_password满足'%23%',以及u_nickname满足'%34%',才能返回street表中对应的行。
    因此,第一个查询语句中的条件是"与"的关系,而第二个查询语句中的条件是"并且"的关系。这导致了两个查询语句的逻辑差异。
    解决方案:
    如果你想要的是第一个查询语句的逻辑,即要求t_user_bigdata表中的一行数据同时满足所有条件,你可以将所有条件放在同一个EXISTS子查询中。
    如果你想要的是第二个查询语句的逻辑,即允许不同的行分别满足不同的条件,你可以保持查询语句不变。
    根据你的需求选择适当的查询语句即可。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 2月27日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真