SQL从多个表中选择返回可用的内容

时间:2018-04-02 23:50:20

标签: mysql sql database pdo innodb

我有三个表,一个用于用户,一个用于图像,另一个用于将图像映射到用户。这是我的查询(简化):

"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表中将没有它们的条目,并且查询将返回一个空集(可以理解)。如何查询数据库,以便在没有指定图像的情况下,我仍然可以从用户表中获取任何内容?

1 个答案:

答案 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;