SQL表连接 - 重复的行条目和可能需要的两个连接

时间:2018-01-16 01:57:41

标签: sql sql-server join

我有两张桌子:

ZE:

Zone LandUse
101  Uni
102  Mall
103  Gym
104  Uni
105  Residential

Uni_Distribution:

Zone Distribution
1    0.1
2    0.2
3    0.3
4    0.4
5    0.1

我想加入这些表格以提供以下内容(仅调用名为University的土地使用的区域ID):

Origin Destination Distribution
101    1           0.1
101    2           0.2
101    3           0.3
101    4           0.4
101    5           0.1
1      101         0.1
2      101         0.2
3      101         0.3
4      101         0.4
5      101         0.1
104    1           0.1
104    2           0.2
104    3           0.3
104    4           0.4
104    5           0.1
1      104         0.1
2      104         0.2
3      104         0.3
4      104         0.4
5      104         0.1

也就是说,我希望能够以这样的方式加入这两个表:我可以将每个表中的区域ID用作两个单独的列,我需要为每个唯一的列重复ZE.Zone Uni_Distribution表的一行。当Land Land为ZE时,我还需要查询仅使用表University中的区域ID。

我已经尝试了以下查询作为开始只是获取表的一部分,但是我在这个阶段没有得到我想要的东西(Origin的大多数是NULL值)。

SELECT
    ZE.[Zone] AS Origin,
    U.[Zone] AS Destination,
    U.[Distribution]
FROM ZE
RIGHT JOIN [dist].[University_Distribution] AS U
    ON U.Zone = ZE.[Zone]

1 个答案:

答案 0 :(得分:0)

我认为你基本上想要一个cross join

SELECT ZE.[Zone] as Origin, U.[Zone] as Destination, U.[Distribution]
FROM ZE CROSS JOIN
     [dist].[University_Distribution] U 
WHERE ZE.land_use = 'UNI';

这只是你想要的一半。对于完整的解决方案,您还需要UNION ALL

SELECT ZE.[Zone] as Origin, U.[Zone] as Destination, U.[Distribution]
FROM ZE CROSS JOIN
     [dist].[University_Distribution] U 
WHERE ZE.land_use = 'UNI'
UNION ALL
SELECT U.[Zone] as Destination, ZE.[Zone] as Origin, U.[Distribution]
FROM ZE CROSS JOIN
     [dist].[University_Distribution] U 
WHERE ZE.land_use = 'UNI';