我有两个表(表A和表B),如下所示:
表A:
Col 1 Col 2
--------------
A 1
A 2
A 3
...
A 15
...
表B:
Col 3 Col 4
--------------
A a
A b
我想写一个查询将表B col 4连接到表A.表B col 3将匹配表A col 1,所以我想加入这个列。我要找的结果是:
表C:
Col 1 Col 2 Col 4
-----------------------
A 1 a
A 2 b
A 3 null
A 4 null
....
A 15 null
....
我尝试了以下内容:
select
tableA.col1,
tableA.col2,
tableB.col4
from
tableA
inner join tableB on tableA.col1 = tableB.col3
但这会产生结果:
Col 1 Col 2 Col 4
-----------------------
A 1 a
A 1 b
A 2 a
A 2 b
....
A 15 a
....
答案 0 :(得分:3)
WITH A AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col2) AS RN
FROM TableA
), B AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Col3 ORDER BY Col4) AS RN
FROM TableB
)
SELECT A.Col1, A.Col2, B.Col4
FROM A LEFT OUTER JOIN B ON A.Col1 = B.Col3 AND A.RN=B.RN
答案 1 :(得分:0)
使用left join
代替inner join
。
inner join
仅加入匹配的行left join
和right join
返回完整的左表或右表,其中包含来自第二个表的匹配行或空值full join
获取两个表中的所有行。答案 2 :(得分:0)
像这样使用LEFT JOIN
:
SELECT
tableA.col1,
tableA.col2,
tableB.col4
FROM tableA
LEFT JOIN tableB on tableA.col1 = tableB.col3
答案 3 :(得分:0)
我认为您没有发布正确的查询和/或结果:
(我原以为)
Col 1 Col 2 Col 4
-----------------------
A 1 a
A 1 b
A 2 a
A 2 b
...
为了达到您想要的结果,无论奇怪和不寻常,您都需要为表B生成序列号以加入表A中的第2列。
我能想到的最简单的方法是使用子查询。
答案 4 :(得分:0)
将数据更改为选项吗?
Table A:
Col 1 Col 2
--------------
A 1
A 2
A 3
...
A 15
...
Table B:
Col 2 Col 4
--------------
1 a
2 b
SELECT tableA.col1, tableA.col2, tableB.col4
FROM tableA
LEFT JOIN tableB ON tableA.col2 = tableB.col2