在我的应用程序中,我有Materials
和Handlings
,每种材料可以有多种处理方式。
因此,我有一个表格材料,处理内容和handlingMaterial
。
在我的编辑材料视图中,我想列出所有现有的处理并检查添加到特定材料的处理,而我的问题是:
例如: 我有材料:
ID | NAME
----------
1 | xpto
我有以下处理方法:
ID | Name
-----------------
1 | Temperature
2 | Painting
3 | Anti-humidity
以及在物料和处理之间建立关系的处理材料:
ID | ID_HANDLING | ID_MATERIAL
------------------------------
1 | 1 | 1
2 | 3 | 1
在此示例中,我们可以说材料xpto添加了2种处理。
在我的查询中,我想返回这个:
ID | Name | HANDLING
------------------------------
1 | Temperature | 1
2 | Painting | 0
3 | Anti-humidity | 1
但是结果是这样的:
ID | Name | HANDLING
------------------------------
1 | Temperature | 0
1 | Temperature | 1
2 | Painting | 0
3 | Anti-humidity | 0
3 | Anti-humidity | 1
select distinct [u_handling_alb].*,
(CASE WHEN u_handlingMaterials_alb.u_material_id = 1 THEN 1 ELSE 0 END) AS handling
from [u_handling_alb]
left join [u_handlingMaterials_alb] on [u_handling_alb].[id ] = [u_handlingMaterials_alb].[u_handling_id]
where [u_handling_alb].[u_active] = 1
将处理为1的结果重复,将值为0的值与值为1的值重复。我不明白为什么……错误可能是这种情况。
我怎么了?
答案 0 :(得分:1)
如果我理解正确,则希望将条件移至on
子句:
select h.*,
(case hm.u_material_id is not null when 1 then 1 else 0 end) as handling
from u_handling_alb h left join
u_handlingMaterials_alb hm
on h.id = hm.u_handling_id and
hm.u_material_id = 1
where h.u_active = 1