以下查询是否相同?或者是否有任何重大差异(表现)?
SELECT
u.id, u.username, u.name
FROM
`friends` f, `user` u
WHERE
(f.friend_id = u.id AND f.user_id = 2 AND f.fstatus = 1)
和
SELECT
u.id, u.username, u.name
FROM
`friends` f
LEFT JOIN user u ON (f.friend_id = u.id)
WHERE
(f.user_id = 2 AND f.fstatus = 1)
答案 0 :(得分:5)
不,从技术上讲,这些查询不一样:第一个查询不会列出朋友,除非user
表中有相应的项目。虽然不应该发生friends
行没有对应的user
(在关系数据库中具有正确定义的参照完整性约束的外键冲突),但理论上的差异仍然存在。 / p>
第一个查询检查条件f.friend_id = u.id
,如果条件不满足则抛出连接的两边(即它是内部连接)。第二个查询具有外部联接,该联接是使用LEFT
关键字引入的。因此,即使第二个表中没有相应的行,第二个查询也会保留第一个表的行。