【发布时间】:2012-05-08 16:05:20
【问题描述】:
对于这两个表:
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 上使用内部连接,但我得到笛卡尔积
感谢您的帮助。
帮助脚本(如果有人愿意测试的话):
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');
【问题讨论】:
-
@Vash:不,这不是笛卡尔连接。显然 OP 需要加入 ROW NUMBER。可能会完成,具体取决于 RDBMS。
-
@Vash: 想要的输出不是笛卡尔连接
-
您刚刚说明您需要两列:一列用于街道,第二列用于邮编。逗号是列的分隔符。
'ZIP1','STREET1' -
@PabloSantaCruz,是的,我尽快删除了评论。但对你来说慢了。行号是很好的提示。
-
您如何知道
TEST1中的哪一行与TEST2中的哪一行相匹配?为什么STREET1匹配ZIP1而不是ZIP2?或者哪些行(具有相同的ID)匹配在一起是否重要?如果一个或另一个表的特定ID的行数比另一个表多,会发生什么情况?
标签: sql oracle inner-join