SQL 加入相等加上不相等的笛卡尔

SQL join on equal plus cartesian of those which not equal

我需要以这样的方式连接两个表,在输出中我有一个联合:

一:1|2|3|5 b: 2|3|4|6

结果:(2,2)|(3,3)|(1,4)|(1,6)|(5,4)|(5,6)

您有什么有用的建议吗? (我在 SQL Server 2012 上工作) 谢谢!

我会使用 CTE 来定义连接的记录,如下所示:

WITH MatchedRows
AS
SELECT A.a, B.b FROM A a INNER JOIN B b ON A.a = B.b

SELECT MatchedRows.a, MatchedRows.b
FROM MatchedRows
UNION
SELECT A.a, B.b FROM A a, B b
WHERE A.a NOT IN (SELECT a FROM MatchedRows)
  AND B.b NOT IN (SELECT b FROM MatchedRows)

你没有说列名是什么,所以就叫它们 Col.

SELECT A.Col, 
B.Col 
FROM A 
INNER JOIN B 
on A.Col = B.Col

UNION ALL

SELECT A.Col, 
B.Col 
FROM A 
CROSS JOIN B
WHERE A.Col NOT IN (SELECT B.Col FROM B)
AND B.Col NOT IN (SELECT A.Col FROM A)