SQL Join提供更多行

时间:2014-05-06 02:57:31

标签: sql sql-server

我有两张桌子

Table 1

PropertyId

1
2
3
4
5
6

Table 2

PropertyID PropertyCode PropList ID

1            2            45
3            4            67
5            6            89

Table 3

Property ID  IType

1             3
2             11
3             3 
4             11
5             3
6             11

Target Table

PropertyID   PropertyCode

1             45
2             45
3             67
4             67
5             89
6             89

以上是我拥有的两个表的Coln表示

PropertyId上的两个表格时,我希望表格加入表格2的PropertyId,如果在Table2.propertyId下找不到该值,则加入Table2.PropListId

我正在使用以下查询。

SELECT  t1.*, t2.PropertyCode 
FROM    Test.dbo.DailyBudgetExtract T1 , Test.dbo.DailyPropertylListExtract T2 
WHERE   t1.propertyid = t2.proplistid 
OR      t1.propertyid = t2.propertyid

编辑。

如果有另一个表3,那么如果加入(Table1.PropertyId = Table 3.property Id),如果Itype =3然后加入PropertyId表2或Itype = 11那么加入在PropListID

它运行正常但是,表1对我来说有180000行表2245行。当我运行查询时,它说2450000行受影响。这里有什么问题吗?

2 个答案:

答案 0 :(得分:0)

如果您的数据正在成倍增加,则可能是因为您在table2中的列中有重复项,或者您在propertycodepropertid列之间重复了这些值。在这种情况下,第一个是更痛苦的处理。第二个可以使用左外连接处理。

我假设您为PropertyCode交换了PropertyListTable2列(基于示例数据)。这是一个可能满足您需求的查询:

   SELECT  t1.*, coalesce(t2.PropertyCode, t3.PropertyCode) as PropertyCode
   FROM Test.dbo.DailyBudgetExtract T1 LEFT OUTER JOIN
        Test.dbo.DailyPropertylListExtract T2 
        ON t1.propertyid = t2.propertyid LEFT OUTER JOIN
        Test.dbo.DailyPropertylListExtract T3
        ON t1.propertyid = t3.proplistid ;

答案 1 :(得分:0)

您需要为DailyPropertylListExtract表建立两个连接,每个连接具有相应的连接条件,然后从连接条件找到行的表中输出值。

Select b.*,  
   Coalesce(p1.PropertyCode,  p2.PropertyCode) PropertyCode
FROM Test.dbo.DailyBudgetExtract b
   left Join Test.dbo.DailyPropertylListExtract p1
       On  p1.propertyid = b.propertyid 
   left Join Test.dbo.DailyPropertylListExtract p2
       On  p2.PropListId  = b.propertyid