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

Chr*_*ris 2 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'
Run Code Online (Sandbox Code Playgroud)

表'a'是主表,包含有关对象的各种信息.

表'b'由每个对象的几个图像URL组成,这些URL使用'imagetype'和'imagecategory'进行过滤,仅匹配每个对象的一个​​图像.

只有表'b'具有匹配的id,imagetype和imagecategory时,两个表的连接才有效.如果没有,只返回表'a'中包含它们的记录,这不是我想要的.我希望表'b'返回使用IFNULL函数设置的默认值,所以我得到一个完整的结果集,即使这个表缺少链接id的值:s.

我怎样才能做到这一点?

Mik*_*son 7

尝试将针对列的测试移到imagesjoin子句中.如果没有匹配项,imagesnull的列中将不会有任何匹配项.

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'
Run Code Online (Sandbox Code Playgroud)