我有三个表,一个用于用户,一个用于图像,另一个用于将图像映射到用户。这是我的查询(简化):
"SELECT * FROM tb_users u, tb_images i, tb_mapimagestousers m
WHERE
u.id = :userid
AND
m.userid = u.id
AND
i.id = m.imgid
只要有数据从所有表中提取,此查询就会返回。如果没有为用户分配图像,则在图像或mapimagestousers表中将没有它们的条目,并且查询将返回一个空集(可以理解)。如何查询数据库,以便在没有指定图像的情况下,我仍然可以从用户表中获取任何内容?
答案 0 :(得分:2)
从不在FROM
子句中使用逗号。 始终使用正确,明确,标准的JOIN
语法。
然后你会知道外连接。
你想:
SELECT *
FROM tb_users u LEFT JOIN
tb_mapimagestousers miu
ON miu.userid = u.id LEFT JOIN
tb_images i
ON miu.imgid = i.id
WHERE u.id = :userid;