Oracle SQL - 左连接导致重复

时间:2018-03-30 18:08:12

标签: sql oracle join

祝所有人满意!* / / p>

我正在使用三张桌子,而且我很难加入连接。表1包含字段名称,ID,状态,销售额。表2包含州和州ID(以及其他)。表3具有stateID和region(以及其他)。我需要的是表1中的stateID和region字段。

我尝试的是

select name, id, state, stateID, region, sales
from table 1 taba
left join table 2 tabb
on taba.state = tabb.state
left join table 3 tabc
on tabb.stateid = tabc.stateid

这使表1从~16k行到~100k行

我自己尝试了第一次加入并获得了正确的行数。当我进行第三次连接时,如何摆脱这些重复的行?

Table 1 
Name   ID    State        Sales  
John   01    Texas       50,234  
Steve  02    Washington  39,261
Amanda 03    Ohio        67,892

Table 2 
State       StateID
Texas       TX
Washington  WA 
Ohio        OH

Table 3
StateID    Region
TX         South
WA         Northwest
OH         Midwest

我需要它看起来像这样:

Name   ID    State        StateID   Region   Sales  
John   01    Texas        TX       South     50,234  
Steve  02    Washington   WA       Northwest 39,261
Amanda 03    Ohio         OH       Midwest   67,892

2 个答案:

答案 0 :(得分:1)

我假设每个州都有多个区域,但表1中没有任何区域表示区域。因此,当您加入表3并且该州有100个区域时,您唯一加入的是stateID,它将返回所有100个区域。

您可能需要在第一个表格中指明区域和状态,或者您可以在查询中投放DISTINCT。

JSpinner

根据您提供的新表和数据,这应该可以满足您的需求:

select DISTINCT name, id, state, stateID, region, sales
from table 1 taba
left join table 2 tabb
on taba.state = tabb.state
left join table 3 tabc
on tabb.stateid = tabc.stateid

答案 1 :(得分:0)

我认为使用此查询应该可以胜任。

select name, id, state, stateID, region, sales
from table1 natural join table2 natural join table3

因为表对属性使用相同的名称,所以可以使用自然连接(它只保留公共属性,假设table1中的所有状态都在table2中,而table2中的所有stateID都在table3中)。

如果你需要每个名字的销售总额(你的问题不明确):

select name, id, state, stateID, region, SUM(sales)
from table1 natural join table2 natural join table3
group by name, id, state, stateID, region