我正在尝试根据连接表的值查询多个表和一个查询。
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'由每个对象的几个图像网址组成,使用'imagetype'和'imagecategory'进行过滤,只匹配每个对象的一个图像。
只有表'b'具有匹配的id,imagetype和imagecategory时,两个表的连接才有效。如果没有,只返回表'a'中包含它们的记录,这不是我想要的。我希望表'b'返回使用IFNULL函数设置的默认值,所以我得到一个完整的结果集,即使这个表缺少链接id的值:s。
我该怎么做?
答案 0 :(得分:7)
尝试将针对images
中的列的测试移动到join子句中。如果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'