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

多个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日