我试图从一张桌子中选择所有类别,然后在第二张桌子中将它们与自行车匹配。如果第二个表中没有自行车,则无论如何都应返回所有类别。如果第二张表中有一辆或多辆自行车,则仍应返回所有类别,但与自行车数据相匹配。
这是我到目前为止所做的:
select `st`.* , `sc`.*
from `sbb_categories` `sc`
left join `sbb_tiles` `st` on `st`.`category` = `sc`.`id`
where `st`.`bike` = '381' or `st`.`id` is null;
这种作品,问题是如果表2中没有自行车,它会返回所有类别。如果表2中有自行车,它将正确返回自行车类别和自行车381 [约16类]对于任何其他自行车[例如382]表2中不存在它将返回所有类别除了那些属于自行车381
如何修复此查询?
答案 0 :(得分:0)
由于您过滤了 st
。bike
=' 381'或者在左连接表中的st
。id
,它只返回那些返回true的结果。所以要获得382,要么添加**或* st
。bike
=' 382' **或删除** st
。bike
=' 381'或**
答案 1 :(得分:0)
您希望on
子句中的条件而不是where
子句:
select `st`.* , `sc`.*
from `sbb_categories` `sc` left join
`sbb_tiles` `st`
on `st`.`category` = `sc`.`id` and `st`.`bike` = '381' ;