为什么要在 MySQL 中使用 EXISTS() 函数?

Mar*_* AJ 1 mysql sql exists

我有这样的疑问:

SELECT * FROM mytable t1
  WHERE t1.id = :id AND
        EXISTS(SELECT 1 FROM t2 WHERE t2.post_id = :id)
Run Code Online (Sandbox Code Playgroud)

当我删除该EXISTS()函数时,我的代码仍然有效:

SELECT * FROM mytable t1
  WHERE t1.id = :id AND
        (SELECT 1 FROM t2 WHERE t2.post_id = :id LIMIT 1)
Run Code Online (Sandbox Code Playgroud)

那么我为什么要这样写呢?它的优点是什么?

Pre*_*red 5

简而言之:

  • EXISTS当找到第一个结果时返回,而不是获取所有匹配的记录(因此当有多个记录匹配条件时效率更高)
  • EXISTS语义上是正确的。
  • 1当第二个查询中存在列名而不是,并且该列包含NULLFALSE0等时,MySQL 会将其隐式转换为FALSE,从而导致错误结果。
  • EXISTS实际上是由 ANSI 标准定义的,而第二种形式则不是。(第二个查询在其他DBMS中可能会失败)

作为额外的旁注,*当您使用 时,您也可以使用EXISTS,因为它检查是否存在匹配的记录,而不是值。