我使用Union All和Left join功能连接3个表,但显示重复记录。
表1
Worksheet No Employee code
001 A
001 B
001 C
002 D
002 E
表2
Worksheet No Quantity
001 10
002 20
表3
Worksheet No Employee code Payslip No Date Salary
001 A P001 1/1/14 300
001 B P002 1/1/14 700
001 C P003 1/1/14 200
002 D P004 2/2/14 1000
002 E P005 2/2/14 800
输出应该是
Worksheet No Employee code Payslip No Date Quantity Salary
001 A P001 1/1/14 10 300
001 B P002 1/1/14 10 700
001 C P003 1/1/14 10 200
002 D P004 2/2/14 20 1000
002 E P005 2/2/14 20 800
但它会显示重复的记录,这不是我想要的
Worksheet No Employee code Payslip No Date Quantity Salary
001 A P001 1/1/14 10 300
001 A P002 1/1/14 10 700
001 A P003 1/1/14 10 200
001 B P001 1/1/14 10 300
001 B P002 1/1/14 10 700
001 B P003 1/1/14 10 200
001 C P001 1/1/14 10 300
001 C P002 1/1/14 10 700
001 C P003 1/1/14 10 200
002 D P004 2/2/14 20 1000
002 D P005 2/2/14 20 800
002 E P004 2/2/14 20 1000
002 E P005 2/2/14 20 800
这是我的查询
SELECT
tlb2.Worksheet_No, tlb2.Quantity,
null, null,null,null
FROM Table2 tbl2
LEFT OUTER JOIN Table1 tbl1 on (tbl1.Worksheet_No = tbl2.Worksheet_No)
UNION ALL
SELECT
null,null,
tbl3.Employee_Code,tbl3.Payslip_No,tbl3.Date,tbl3.Salary
FROM Talbe3 tlb3
LEFT OUTER JOIN Table1 tbl1 on (tbl1.Employee_Code = tbl3.Employee_Code)
任何人都可以找出问题所在吗? 谢谢
答案 0 :(得分:0)
此查询会生成所需输出中列出的结果:
SELECT
tbl3.Worksheet_No,
tbl3.Employee_Code,
tbl3.Payslip_No,
tbl3.Date,
tbl2.Quantity,
tbl3.Salary
FROM Table3 tbl3
JOIN Table2 tbl2 ON (tbl3.Worksheet_No = tbl2.Worksheet_No)
虽然它没有使用UNION
- 所述的问题(所需的输出)目前不适合使用UNION
连接。如果你要包含一些更多的数据来表明为什么需要UNION(而不是想要?),那么可能需要重写查询。
正如评论中所指出的,似乎有些表格需要进行标准化。也许可以重命名它们以指示每个表的用途,例如EmployeeWorksheet,WorksheetQuantity,Employee。我不太清楚为什么工作表编号包含在Table 3
中,当该表中的其他内容似乎与员工有关时。
答案 1 :(得分:0)
尽管您的表格设计和实际查询还有很大的改进空间,但您似乎对 union all 和 union 实际上做了什么有误解。
您可以阅读以下解释:http://www.w3schools.com/sql/sql_union.asp。
简而言之:
答案 2 :(得分:0)
表1似乎没有任何用途,但如果您想将其加入表3,则表明您应该加入工作表而不是员工代码。