2

我正在尝试根据连接表的值使用一个查询来查询多个表。

SELECT a.id,a.name,
IFNULL(b.imageurl, 'default image url') AS 'imageurl',
IFNULL(b.imagecategory, '34') AS 'imagecategory',
IFNULL(b.imagetype, 't') AS 'imagetype'
FROM summary a
LEFT JOIN images i ON a.id = b.id
WHERE b.imagetype = 'thumbnail' AND b.imagecategory = '99'

表“a”是主表,包含有关对象的各种信息。

表“b”由每个对象的多个图像 url 组成,使用“imagetype”和“imagecategory”过滤这些图像以仅匹配每个对象的一个​​图像。

仅当表“b”具有匹配的 id、imagetype 和 imagecategory 时,两个表的连接才有效。如果不是,则仅返回包含它们的表“a”中的记录,这不是我想要的。我希望表“b”返回使用 IFNULL 函数设置的默认值,因此即使该表缺少链接 id:s 的值,我也会得到完整的结果集。

我怎样才能做到这一点?

4

1 回答 1

7

尝试将针对列的测试移到images连接子句中。当您的列中没有匹配项时,您的列images中将null不等于任何内容。

SELECT a.id,a.name,
IFNULL(b.imageurl, 'default image url') AS 'imageurl',
IFNULL(b.imagecategory, '34') AS 'imagecategory',
IFNULL(b.imagetype, 't') AS 'imagetype'
FROM summary a
LEFT JOIN images b ON a.id = b.id AND
                      b.imagetype = 'thumbnail' AND 
                      b.imagecategory = '99'
于 2011-12-27T13:28:02.293 回答