我有三张桌子。 Boys_dress,Girls_dress和sleeve_dress
Boys_dress
id dress_name status
1 sample1 1
2 Sampel2 1
3 Sampel3 1
Girls_dress
id dress_name status
1 Sampel4 1
2 Sampee5 1
3 Sampel6 1
Sleeve_dress
id boys_dress_id girls_dress_id sleeve_name
1 2 2 Full
1 1 1 Half
1 1 3 Full
1 2 null Full
从上面的boys_dress_id和girls_dress_id是可选列。 boys_dress_id和girls_dress_id列中的任何一个都必须包含数据。 通过连接具有status = 1
的数据的着装表,从带有衣服名称的sleeve_dress表中检索数据我使用以下MySQL查询检索数据。但是,如果由于条件status = 1
,boys_dress_id或girls_dress_id为空,我无法获取数据。即使girls_dress_id为null,我也需要检索boys_dress_id的数据。
select *
from sleeve_dress sd
left join Boys_dress bd on bd.id = sd.boys_dress_id
left join girls_dress gd on gd.id = sd.girls_dress_id
where bd.status = 1
AND gd.status = 1
答案 0 :(得分:0)
将status
上的条件移至on
子句:
select . . . -- explicitly put the column names here
from sleeve_dress sd left join
Boys_dress bd
on bd.id = sd.boys_dress_id and bd.status = 1 left join
girls_dress gd
on gd.id = sd.girls_dress_id and gd.status = 1;
where
子句(正如您所知)正在过滤掉不匹配的行,因为NULL
状态与1
不匹配。 on
子句使条件成为join
条件的一部分。
请注意,我已将select *
替换为select . . .
。合理的人不同意select *
是否是一个表的好主意。但是,您有多个具有重叠列名称的表。在这种情况下,您希望显式列出所需的列,可能会为它们提供特定的别名(例如gd.status as gd_status
)。