【发布时间】:2020-01-07 11:38:30
【问题描述】:
我编写这个查询是为了从 3 个不同的表中检索数据。
这里[我选择的所有列都来自第一个和第二个表],根据我的实际需要检索数据:
SELECT DISTINCT SD.salary_component,SS.posting_date,SS.payroll_entry,
SD.parentfield,SD.amount,SS.employee,SS.name
FROM`tabSalary Detail` SD
INNER JOIN `tabSalary Slip` SS
ON SS.name=SD.parent
INNER JOIN `tabGL Entry` GL
ON GL.against_voucher=SS.payroll_entry
WHERE SS.employee='EMP0110' AND
SS.posting_date='2020-03-11' AND
SD.parentfield != 'indebtedness' AND
SS.payroll_entry='HR-PRUN-2019-01027';
想要的和查询结果是
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04
=======
但是,当我在第三个表中选择两列时,出现问题并且数据重复:
SELECT DISTINCT SD.salary_component,SS.posting_date,SS.payroll_entry,
SD.parentfield,SD.amount,SS.employee,SS.name
GL.credit,GL.debit
FROM`tabSalary Detail` SD
INNER JOIN `tabSalary Slip` SS
ON SS.name=SD.parent
INNER JOIN `tabGL Entry` GL
ON GL.against_voucher=SS.payroll_entry
WHERE SS.employee='EMP0110' AND
SS.posting_date='2020-03-11' AND
SD.parentfield != 'indebtedness' AND
SS.payroll_entry='HR-PRUN-2019-01027';
第二个查询结果是54行重复
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 300.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 300.000000 0.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 500.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 500.000000 0.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 3600.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 3600.000000 0.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 445.890000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 445.890000 0.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 336.990000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 336.990000 0.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 95.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 95.000000 0.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 1150.000000
AAAA 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 1150.000000 0.000000
===================================================================================================================================
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 300.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 300.000000 0.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 500.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 500.000000 0.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 3600.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 3600.000000 0.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 445.890000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 445.890000 0.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 336.990000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 336.990000 0.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 95.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 95.000000 0.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 1150.000000
BBBB 2020-03-11 HR-PRUN-2019-01027 earnings 300.000000 EMP0110 Sal Slip-EMP0110-1911-04 1150.000000 0.000000
===================================================================================================================================
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 300.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 300.000000 0.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 500.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 500.000000 0.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 3600.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 3600.000000 0.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 445.890000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 445.890000 0.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 336.990000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 336.990000 0.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 95.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 95.000000 0.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 1150.000000
CCCC 2020-03-11 HR-PRUN-2019-01027 earnings 500.000000 EMP0110 Sal Slip-EMP0110-1911-04 1150.000000 0.000000
===================================================================================================================================
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 300.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 300.000000 0.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 500.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 500.000000 0.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 3600.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 3600.000000 0.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 445.890000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 445.890000 0.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 336.990000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 336.990000 0.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 95.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 95.000000 0.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 0.000000 1150.000000
DDDD 2020-03-11 HR-PRUN-2019-01027 earnings 3600.000000 EMP0110 Sal Slip-EMP0110-1911-04 1150.000000 0.000000
出了什么问题,我应该搜索哪些主题来获得这个想法? 最后,什么是最好的解决方案?
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
-
使用第一个查询作为一个表并与
tabGL EntryGL 连接以解决问题 -
我不懂你的表。为什么salary_detail 和salary_slip 表是通过name 和一个名为parent 的列连接的?为什么不通过一些工资ID?请向我们提供有关您的桌子的详细信息。它们代表什么?他们独特的钥匙是什么?它们是如何通过外键关联的。
-
关于您的第一个查询:
DISTINCT通常表示查询写得不好。你怎么会首先得到重复的行?你不能马上避开它们吗?您的连接是否不完整,从而产生它们?在您的第二个查询中,您可能需要一些聚合。不知道。请向我们展示示例数据,以演示您获得重复结果行的情况。 -
@GordonLinoff 我已经编辑了帖子
标签: mysql sql inner-join distinct distinct-on