SQL 从多个表中选择返回可用的内容
Posted
技术标签:
【中文标题】SQL 从多个表中选择返回可用的内容【英文标题】:SQL Select from multiple tables return what is available 【发布时间】:2018-04-02 23:50:20 【问题描述】:我有三张表,一张用于用户,一张用于图像,一张用于将图像映射到用户。这是我的查询(简化):
"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】:永远不要在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;
【讨论】:
当您将这些连接串在一起时,它是否将所有返回的结果视为一个表?因此,如果我先进行一堆左连接,然后再进行右连接,那么就组合结果的方式而言,右连接会将整个左连接字符串视为一个表,对吧? 还有什么特别的原因为什么不在FROM
子句中使用逗号?
因为正确的 SQL 语法是使用显式的JOIN
s。逗号只是 1970 年代和 1980 年代定义的原始语言的保留。以上是关于SQL 从多个表中选择返回可用的内容的主要内容,如果未能解决你的问题,请参考以下文章