INNER JOIN与EXIST要求相反

时间:2010-11-14 06:13:00

标签: mysql

如果内部联接需要存在一行,那么它的反面是什么,而不必对NOT EXISTS进行子查询?

我替换了

 AND NOT EXISTS (
  SELECT
   *
  FROM topic_read_assoc
  WHERE topic_id = topic.id
   AND member_id = ".$this->tru->application->currentMember->getId()."
 )

OUTER JOIN topic_read_assoc ON (
 topic_read_assoc.topic_id = topic.id AND
 member_id = member_id = ".$this->tru->application->currentMember->getId()."
)

并且它没有产生与第一个查询(有效)相同的结果

2 个答案:

答案 0 :(得分:9)

OUTER JOIN with a WHERE field IS NULL

示例:

SELECT A.name FROM A INNER JOIN B on A.id = B.id

在A中选择其名称字段存在于B

中的名称

<强>相反:

SELECT A.name FROM A OUTER JOIN B on A.id = B.id WHERE B.id IS NULL

在A中选择其名称字段存在于B

中的名称

答案 1 :(得分:-1)

我认为外连接上的选择很慢,因为dbms先离开连接,然后右连接并删除重复的行。所以我建议你选择左边连接,然后右连接,做一个交叉。最好不要对任何连接进行操作,因为视图没有索引。