2016-06-14 9 views
-4

私は同じ構造の7つのテーブルを持っています。各テーブルには2つの列があり、これらの列には結合キー(プライマリキーではない)と2列目が一意です。複数のテーブルの1つの行をテーブルの1つの行に変換するSQLクエリ?

以下は、2つのテーブルに記載されている要件です。しかし、7つのテーブルを開発する必要があります。

TAB1: 
===== 
CITY NAME 
HYD  RAMU 
HYD  KRISH 


TAB1: 
===== 
CITY NAME 
HYD  RAJ 
HYD  KRISH 

OUTPUT: 
======= 

CITY EXIST1 EXIST2 
HYD  RAMU  NULL 
HYD  NULL  RAJ 
HYD  KRISH KRISH 

答えて

0

あなたがFULL JOINの後にあるように見えます:

SELECT COALESCE(t1.CITY, t2.CITY), t1.NAME AS EXIST1, t2.NAME AS EXIST2 
FROM TAB1 AS t1 
FULL JOIN TAB2 ON AS t2 ON t1.CITY = t2.CITY 
+0

これは、 'name'の列に参加していないとしませんありません。 c 2つ以上のテーブルに対するOPの要件をonsider onsider。 – MT0

+0

こんにちはジョルゴス、お返事ありがとうございます。上記のクエリを実行すると、結合キーの値が常に一致するため、期待した結果が得られませんでした。したがって、結合キーに問題はありません。トリッキーポイント、2列目。上記の例では、 'RAMU'は第1のテーブルに存在しますが、第2のテーブルには存在しません。出力テーブルにはヌル値が表示されます。 2番目の表では、2番目の表に 'RAJ'が存在しますが、1番目の表には存在しません。このため、この値の出力にはNULL値が表示されます。これについての詳細が必要な場合はお知らせください。 –

1

4つのテーブルと答え - 7つのテーブルにそれを拡張することはかなり簡単にする必要があります。

Oracleのセットアップ

CREATE TABLE t1 (city, name) AS 
SELECT 'a', 'a' FROM DUAL UNION ALL 
SELECT 'a', 'b' FROM DUAL; 

CREATE TABLE t2 (city, name) AS 
SELECT 'a', 'a' FROM DUAL UNION ALL 
SELECT 'a', 'c' FROM DUAL; 

CREATE TABLE t3 (city, name) AS 
SELECT 'a', 'b' FROM DUAL UNION ALL 
SELECT 'a', 'd' FROM DUAL; 

CREATE TABLE t4 (city, name) AS 
SELECT 'a', 'a' FROM DUAL UNION ALL 
SELECT 'a', 'e' FROM DUAL; 

クエリ

SELECT COALESCE(t1.city, t2.city, t3.city, t4.city) AS city, 
     t1.name AS exist1, 
     t2.name AS exist2, 
     t3.name AS exist3, 
     t4.name AS exist4 
FROM t1 
     FULL OUTER JOIN t2 
     ON ( t1.city = t2.city 
      AND t1.name = t2.name) 
     FULL OUTER JOIN t3 
     ON ( COALESCE(t1.city, t2.city) = t3.city 
      AND COALESCE(t1.name, t2.name) = t3.name) 
     FULL OUTER JOIN t4 
     ON ( COALESCE(t1.city, t2.city, t3.city) = t4.city 
      AND COALESCE(t1.name, t2.name, t3.name) = t4.name); 

出力

CITY EXIST1 EXIST2 EXIST3 EXIST4 
---- ------ ------ ------ ------ 
a a  a    a 
a b    b 
a   c 
a     d 
a       e 
+0

ありがとうMTO、私は上記の質問が私のシナリオでは挑戦的に働くことを願っています。私は私のシナリオでそれをテストし、あなたを返すでしょう。ありがとう –

関連する問題