MySQL - 基于if和join的高级查询

时间:2011-12-27 13:25:06

标签: mysql sql join ifnull

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

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。

我该怎么做?

1 个答案:

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