我有两张桌子
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行受影响。这里有什么问题吗?
答案 0 :(得分:0)
如果您的数据正在成倍增加,则可能是因为您在table2中的列中有重复项,或者您在propertycode
和propertid
列之间重复了这些值。在这种情况下,第一个是更痛苦的处理。第二个可以使用左外连接处理。
我假设您为PropertyCode
交换了PropertyList
和Table2
列(基于示例数据)。这是一个可能满足您需求的查询:
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