如何使用SQL Server 2016/17获取2个不同表中2列之间的组合,不包括每列中值的组合?

时间:2018-03-14 11:41:25

标签: sql combinations sql-server-2016 sql-server-2017

我想知道如何在2个不同的表中获得2列之间的组合,不包括Table1中的值与使用SQL Server 2016或2017的Table2中的值之间的组合?

我需要结合Table1中的id2和Table2中的id。

要获得结果,我使用此查询:

WITH CTE AS (
SELECT id2 AS col FROM Table1
UNION
SELECT id AS col FROM Table2
)
SELECT c1.col, c2.col 
FROM CTE c1 
CROSS JOIN CTE c2 
WHERE c1.col < c2.col
ORDER BY c1.col, c2.col

表1

|id |id2|  
| 1 | 1 |  
| 2 | 2 |  

表2

|id |  
| 3 |  
| 4 |  

预期结果

|id |id2|  
| 1 | 3 | - correct combination  
| 2 | 3 | - correct combination  
| 1 | 4 | - correct combination  
| 2 | 4 | - correct combination  

错误的结果

|id |id2|  
| 1 | 3 | - correct combination  
| 2 | 3 | - correct combination  
| 1 | 4 | - correct combination  
| 2 | 4 | - correct combination  
| 1 | 2 | - incorrect combination from Table 1  
| 3 | 4 | - incorrect combination from Table 2  

1 个答案:

答案 0 :(得分:2)

您似乎想要:

SELECT t1.id, t2.id
FROM Table1 t1 CROSS JOIN
     Table2 t2;

我不知道你为什么要将所有id组合成一个结果集,然后对它进行交叉连接。结果似乎基于简单的CROSS JOIN