如何根据另一个的两列加入 table
how to join a table based on two columns of another
我有表 2:
ZIP
INCOME
ZTCA5 00619
14,601
ZTCA5 12349
20,601
ZTCA5 56729
20,601
...
...
ZTCA5 34562
20,601
表 1:
ID
ZIP1
ZIP2
1
00619
006190000
2
NULL
123490000
3
34562
NULL
Table2 的列比 Table1 多很多。实际的 Table1 更大,但为了示例,我将其设置为 3 行。
我想要以下结果:
ID
ZIP1
ZIP2
ZIP
INCOME
1
00619
006190000
ZTCA5 00619
14,601
2
NULL
123490000
ZTCA5 12349
20,601
3
34562
NULL
ZTCA5 34562
20,601
ZIP2 列是 9 位邮政编码,前五个数字是我感兴趣的数字。
我尝试了以下代码(在另一个答案的帮助下):
SELECT *
FROM Table1 t2
LEFT JOIN Table2 t1
ON substr(t1.ZIP, -5)=t2.ZIP1
OR substr(t1.ZIP,-5)=substr(t2.ZIP2,5)
我对这段代码的问题是它的行数比我原来的 Table1 多,这是不应该发生的。结果应具有与 Table1 相同的行数。我哪里错了?
您可以同时使用 SUBSTR
和 INSTR
加入:
SELECT t1.ID, t1.ZIP1, t1.ZIP2, t2.ZIP, t2.INCOME
FROM Table1 t1
LEFT JOIN Table2 t2
ON SUBSTR(t2.ZIP, INSTR(t2.ZIP, ' ') + 1, 5) =
COALESCE(t1.ZIP1, SUBSTR(t1.ZIP2, 1, 5));
我有表 2:
ZIP | INCOME |
---|---|
ZTCA5 00619 | 14,601 |
ZTCA5 12349 | 20,601 |
ZTCA5 56729 | 20,601 |
... | ... |
ZTCA5 34562 | 20,601 |
表 1:
ID | ZIP1 | ZIP2 |
---|---|---|
1 | 00619 | 006190000 |
2 | NULL | 123490000 |
3 | 34562 | NULL |
Table2 的列比 Table1 多很多。实际的 Table1 更大,但为了示例,我将其设置为 3 行。
我想要以下结果:
ID | ZIP1 | ZIP2 | ZIP | INCOME |
---|---|---|---|---|
1 | 00619 | 006190000 | ZTCA5 00619 | 14,601 |
2 | NULL | 123490000 | ZTCA5 12349 | 20,601 |
3 | 34562 | NULL | ZTCA5 34562 | 20,601 |
ZIP2 列是 9 位邮政编码,前五个数字是我感兴趣的数字。
我尝试了以下代码(在另一个答案的帮助下):
SELECT *
FROM Table1 t2
LEFT JOIN Table2 t1
ON substr(t1.ZIP, -5)=t2.ZIP1
OR substr(t1.ZIP,-5)=substr(t2.ZIP2,5)
我对这段代码的问题是它的行数比我原来的 Table1 多,这是不应该发生的。结果应具有与 Table1 相同的行数。我哪里错了?
您可以同时使用 SUBSTR
和 INSTR
加入:
SELECT t1.ID, t1.ZIP1, t1.ZIP2, t2.ZIP, t2.INCOME
FROM Table1 t1
LEFT JOIN Table2 t2
ON SUBSTR(t2.ZIP, INSTR(t2.ZIP, ' ') + 1, 5) =
COALESCE(t1.ZIP1, SUBSTR(t1.ZIP2, 1, 5));