如果内部联接需要存在一行,那么它的反面是什么,而不必对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()."
)
并且它没有产生与第一个查询(有效)相同的结果
答案 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先离开连接,然后右连接并删除重复的行。所以我建议你选择左边连接,然后右连接,做一个交叉。最好不要对任何连接进行操作,因为视图没有索引。