首页 > 解决方案 > 在 SQL 中连接 4 个表

问题描述

我有一个关于加入 4 张桌子的问题。这是我的查询。

SELECT  
    a.pick_id, a.Serial_No, a.Work_Ord_No, a.Lot_No, 
    a.Product_no, a.Plan_Qty, a.Machine_no, a.shift, a.Scan_dt, 
    b.Trml_code,
    case when c.Wire_Type is null then '-' else c.Wire_Type +' '+ c.Wire_Size+' '+c.Wire_Color end as Wire,
    case when d.Mtrl_code is null then '-' else d.Mtrl_code end as Material
FROM
    pickMaster a 
JOIN
    pickTerminal b ON b.id = a.id 
JOIN
    pickWire c ON c.id = a.id 
JOIN
    pickInserting d ON d.id = a.id

这是我加入之前 4 个表的数据。

在此处输入图像描述

这是我加入他们之后的结果。

在此处输入图像描述

问题是在我加入 4 表后,结果显示 4 行具有相同的材料和电线数据。如何解决这个问题?任何想法?。

标签: sqlsql-servertsql

解决方案


你有一个介于pickTerminal和之间的笛卡尔积pickInserting
您需要以某种方式连接这两个表。

例子!!这是我认为常见的唯一属性?!

SELECT  
    a.pick_id, a.Serial_No, a.Work_Ord_No, a.Lot_No, 
    a.Product_no, a.Plan_Qty, a.Machine_no, a.shift, a.Scan_dt, 
    b.Trml_code,
    case when c.Wire_Type is null then '-' else c.Wire_Type +' '+ c.Wire_Size+' '+c.Wire_Color end as Wire,
    case when d.Mtrl_code is null then '-' else d.Mtrl_code end as Material
FROM
    pickMaster a 
JOIN
    pickTerminal b ON b.id = a.id 
JOIN
    pickWire c ON c.id = a.id 
JOIN
    pickInserting d ON d.id = a.id
    and d.mtrl_side = b.Trml_side <-- add this

但如果没有更多上下文,很难说出如何归档它。


推荐阅读