我是这个门户的新手。我有一个非常简单的问题要解决。它与 ANSI SQL 有关。我正在使用 BIRT 编写报告,并且正在从多个表中获取数据。我了解 SQL 连接是如何工作的,但可能并不完全。我研究了谷歌几个小时,但找不到相关答案。
我的问题是代码中的一种关系产生了重复的结果(复制了同一行 - 重复)。我下定决心要解决它,我使用了所有可用的连接类型。其中一些 SQL 已经生成。我将在下面发布我的代码。我知道我的问题的解决方案之一是使用“DISTINCT”关键字。我已经使用了它,它并没有解决我的问题。
任何人都可以提出任何解决方案吗?
示例代码:
SELECT DISTINCT
partmaster.partdesc,
partmaster.uom,
traders.name AS tradername,
worksorders.id AS worksorderno,
worksorders.partid,
worksorders.quantity,
worksorders.duedate,
worksorders.traderid,
worksorders.orderid,
routingoperations.partid,
routingoperations.methodid,
routingoperations.operationnumber,
routingoperations.workcentreid,
routingoperations.settime,
routingoperations.runtime,
routingoperations.perquantity,
routingoperations.description,
routingoperations.alternativeoperation,
routingoperations.alternativeoperationpreference,
machines.macdesc,
machines.msection,
allpartmaster.partnum,
allpartmaster.nbq,
allpartmaster.partdesc,
routingoperationtools.toolid,
tools.tooldesc,
CAST (emediadetails.data as VARCHAR(MAX)) AS cplandata
FROM worksorders
INNER JOIN partmaster ON worksorders.partid = partmaster.partnum
INNER JOIN traders traders ON worksorders.traderid = traders.id
INNER JOIN routingoperations routingoperations ON worksorders.partid = routingoperations.partid
AND worksorders.routingmethod = routingoperations.methodid
INNER JOIN allpartmaster allpartmaster ON routingoperations.partid = allpartmaster.partnum
LEFT OUTER JOIN machines machines ON routingoperations.workcentreid = machines.macid
LEFT OUTER JOIN routingoperationtools routingoperationtools ON routingoperationtools.partid = routingoperations.partid
AND routingoperationtools.routingmethod = routingoperations.methodid
AND routingoperationtools.operationnumber = routingoperations.operationnumber
LEFT OUTER JOIN tools tools ON tools.toolid = routingoperationtools.toolid
LEFT OUTER JOIN emediadetails ON emediadetails.keyvalue1 = worksorders.id
AND emediadetails.keyvalue2 = routingoperations.operationnumber
AND emediadetails.emediaid = 'worksorderoperation'
我没有太多的测试数据,但我知道即使我使用了DISTINCT
关键字,也会将一行复制两次作为下面查询的结果。我知道我的问题相当具体而不是普遍,但有人提出的解决方案可能会帮助其他人解决类似的问题。