3

この2つのテーブルの場合:

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');
4

3 に答える 3

1

それはきれいではなく、Oracleが結果セットを提供する順序によっては奇妙な結果が得られる可能性がありますが、次のことを試すことができます。

select t1.id, t1.key, t1.value1, t2.value2 
  from
     (select rownum rn, id, key, value1 from test1) t1 
          inner join
     (select rownum rn, id, key, value2 from test2) t2
          using (rn)

提案しているように2つのテーブルを「マージ」する必要がある場合は、このアプローチを使用せずに、「マージ」列を追加してみます。

于 2012-04-27T22:31:34.417 に答える
1

これはそれを行う必要があります:

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
于 2012-04-30T07:09:49.747 に答える
0

いいえ。希望する出力を確実に取得する方法はありません。

データモデルにいくつかの情報が不足しているようです。つまり、テスト1からテスト2に行をリンクする何らかの方法です。現在使用しているID/キーは十分に一意ではありません。

現状でできる最善のことは

select *
from test1 
inner join test2 using (id,key)
order by 1 desc,2,3,4

これはの出力を与えます

130 HANSEN  STREET1 ZIP1
130 HANSEN  STREET1 ZIP2
130 HANSEN  STREET1 ZIP3
130 HANSEN  STREET2 ZIP1
130 HANSEN  STREET2 ZIP2
130 HANSEN  STREET2 ZIP3
130 HANSEN  STREET3 ZIP1
130 HANSEN  STREET3 ZIP2
130 HANSEN  STREET3 ZIP3
120 HANSEN  STREET5 ZIP4
120 HANSEN  STREET5 ZIP5
120 HANSEN  STREET6 ZIP4
120 HANSEN  STREET6 ZIP5
于 2012-04-30T02:03:54.467 に答える