使用内部联接和三个表重复记录

时间:2015-05-23 12:00:22

标签: sql oracle

我目前正在使用3个表,我发现构建一个返回唯一记录集的SQL查询很困难。我正在使用Oracle SQL。

如果我包含UDG_Description字段,我会得到重复的记录。

我尝试在Table1.MachId上使用'distinct',但我认为这是使用它进行查询的错误方法。

我注意到,如果我包含UDG_Description,我会得到重复项,但是我需要表3中关于我想要生成的输出的描述。

如果有人可以帮助我,我感激不尽?

以下是我目前正在使用的当前设置

表1

  • MachId
  • MachCode
  • MachLinkType

表2

  • LevId
  • Lev_UDG_Code(链接到表3)
  • Lev_MachCode(链接到table1)

表3

  • UDG_Id
  • UDG_prefix
  • UDG_code
  • UDG_description

注意 UDG_CODE不是唯一的。 udg_prefix和udg_id必须是唯一的。

SELECT distinct(MachId), MachCode, MachLinkType, Lev_UDG_Code, UDG_Description 
from Table1 INNER JOIN Table2
ON Table1.MachCode = Table2.Lev_MachCode
INNER JOIN Table2 ON
Table3.UDG_Code = Table2.Lev_UDG_Code
WHERE MachLinkType = 'ATX' AND Lev_UDG_Code = '12A89'

亲切的问候,

2 个答案:

答案 0 :(得分:1)

您需要在加入之前从table3获取唯一的代码/说明列表。像这样

SELECT MachId,
       MachCode,
       MachLinkType,
       Lev_UDG_Code,
       tbl3.UDG_Description 
FROM Table1
INNER JOIN Table2 ON Table1.MachCode = Table2.Lev_MachCode
INNER JOIN (SELECT UDG_CODE, 
                   UDG_Description 
            FROM Table3
            GROUP BY UDG_COD, 
                     UDG_Description) tbl3
ON tbl3.UDG_Code = Table2.Lev_UDG_Code

答案 1 :(得分:0)

也许:

select distinct MachId,
                MachCode,
                MachLinkType,
                Lev_UDG_Code,
                UDG_Description 
from Table1
inner join Table2 on Table1.MachCode = Table2.Lev_MachCode
inner join Table3 on Table3.UDG_Code = Table2.Lev_UDG_Code
where MachLinkType = 'ATX' and Lev_UDG_Code = '12A89'