对于这两个表:
CREATE TABLE TEST1 ( ID INTEGER ,key VARCHAR(50),VALUE1 VARCHAR(50));
CREATE TABLE TEST2 ( ID INTEGER ,key VARCHAR(50),VALUE2 VARCHAR(50));
表 1:
130, 'HANSEN', 'STREET1'
130, 'HANSEN', 'STREET2'
130, 'HANSEN', 'STREET3'
120, 'HANSEN', 'STREET5'
120, 'HANSEN', 'STREET6'
表 2:
130, 'HANSEN', 'ZIP1'
130, 'HANSEN', 'ZIP2'
130, 'HANSEN', 'ZIP3'
120, 'HANSEN', 'ZIP4'
120, 'HANSEN', 'ZIP5'
是否有可能得到如下输出:
130, 'HANSEN', 'ZIP1','STREET1'
130, 'HANSEN', 'ZIP2','STREET2'
130, 'HANSEN', 'ZIP3','STREET3'
120, 'HANSEN', 'ZIP4','STREET5'
120, 'HANSEN', 'ZIP5','STREET6'
尝试在 id,key 上使用 inner join,但我得到了笛卡尔积
感谢您的帮助。
帮助脚本(如果有人愿意测试的话):
DROP TABLE TEST1;
DROP TABLE TEST2;
CREATE TABLE TEST1 ( ID INTEGER ,key VARCHAR(50),VALUE1 VARCHAR(50));
CREATE TABLE TEST2 ( ID INTEGER ,key VARCHAR(50),VALUE2 VARCHAR(50));
INSERT INTO TEST1 VALUES (130, 'HANSEN', 'STREET1');
INSERT INTO TEST1 VALUES (130, 'HANSEN', 'STREET2');
INSERT INTO TEST1 VALUES (130, 'HANSEN', 'STREET3');
INSERT INTO TEST1 VALUES (120, 'HANSEN', 'STREET5');
INSERT INTO TEST1 VALUES (120, 'HANSEN', 'STREET6');
INSERT INTO TEST2 VALUES (130, 'HANSEN', 'ZIP1');
INSERT INTO TEST2 VALUES (130, 'HANSEN', 'ZIP2');
INSERT INTO TEST2 VALUES (130, 'HANSEN', 'ZIP3');
INSERT INTO TEST2 VALUES (120, 'HANSEN', 'ZIP4');
INSERT INTO TEST2 VALUES (120, 'HANSEN', 'ZIP5');
最佳答案
应该这样做:
with t1 as (
select id,
key,
value1,
row_number() over (partition by id order by key, value1) as rn
from test1
),
t2 as (
select id,
key,
value2,
row_number() over (partition by id order by key, value2) as rn
from test2
)
select t1.id,
t2.key,
t2.value2||','||t1.value1
from t1
join t2 on t1.id = t2.id and t1.key = t2.key and t1.rn = t2.rn
order by 1 desc, 3 asc
关于sql - 两个表的平面连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358571/