获取重复记录

时间:2018-11-02 10:52:09

标签: sql sql-server

在我的应用程序中,我有MaterialsHandlings,每种材料可以有多种处理方式。

因此,我有一个表格材料,处理内容和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的值重复。我不明白为什么……错误可能是这种情况。

我怎么了?

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