如何连接2个表,以便从一个表返回所有数据并与第二个表中的数据配对

时间:2015-07-18 18:59:24

标签: mysql

我试图从一张桌子中选择所有类别,然后在第二张桌子中将它们与自行车匹配。如果第二个表中没有自行车,则无论如何都应返回所有类别。如果第二张表中有一辆或多辆自行车,则仍应返回所有类别,但与自行车数据相匹配。

这是我到目前为止所做的:

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

如何修复此查询?

2 个答案:

答案 0 :(得分:0)

由于您过滤了 stbike =' 381'或者在左连接表中的stid ,它只返回那些返回true的结果。所以要获得382,要么添加**或* stbike =' 382' **或删除** stbike =' 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' ;