0

我有两个表(表 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
....
4

5 回答 5

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

(SQL 小提琴)

于 2012-11-16T15:12:24.800 回答
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
于 2012-11-16T15:14:40.687 回答
0

使用left join而不是inner join.

  • inner join只连接匹配的行
  • left joinright join返回完整的左表或右表,其中包含第二个表中的匹配行或空值
  • full join从两个表中获取所有行。
于 2012-11-16T15:02:17.197 回答
0

像这样使用LEFT JOIN

SELECT 
        tableA.col1,
        tableA.col2,
        tableB.col4
    FROM tableA
    LEFT JOIN tableB on tableA.col1 = tableB.col3
于 2012-11-16T15:07:01.490 回答
0

我认为您没有发布正确的查询和/或结果:(
我本来期望的)

Col 1    Col 2    Col 4
-----------------------
A        1        a
A        1        b
A        2        a
A        2        b
...

为了达到您想要的结果,无论多么奇怪和不寻常,您都需要为表 B 生成一个序列号,以加入表 A 中的 Col 2。
我能想到的最简单的方法是使用子查询。

于 2012-11-16T15:09:14.293 回答