2017-06-01 19 views
2

これが正しい方法であるかどうかわかりませんが、状況を説明します。左結合が満たされないとSQL - クロス結合

私は2つのテーブルを持っています。最初のテーブルは製品のリストであり、2番目のテーブルはチャネルのリストです。結合条件が満たされている場合はLEFT JOINを実行します。そうでない場合は、CHANNEL表の各チャネルの行を展開します。私はCROSS JOINについて読んだことがありますが、その方法があるかどうかはわかりません。

SELECT P.PRODUCT_ID, C.CHANNEL, C.REGION, C.COUNTRY, C.LANGUAGE FROM PRODUCT P LEFT JOIN CHANNEL C ON C.CHANNEL = P.CHANNEL;

製品表

Product_ID | Product_Name | Channel 
------------------------------------ 
12345678 | Product1  | Ecommerce 
87654321 | Product2  | 
14785236 | Product3  | Outlet 

チャネルテーブル

CHANNEL | REGION | COUNTRY | LANGUAGE 
-------------------------------------- 
Ecommerce | Americas | Canada | EN 
Ecommerce | Americas | Canada | FR 
Outlet | Americas | Canada | EN 
Outlet | Americas | Canada | FR 
[...] 

私はこの出力を期待している:

PRODUCT_ID | CHANNEL | REGION | COUNTRY | LANGUAGE 
--------------------------------------------------- 
12345678 | Ecommerce | Americas | Canada | EN 
12345678 | Ecommerce | Americas | Canada | FR 
87654321 | Ecommerce | Americas | Canada | EN 
87654321 | Ecommerce | Americas | Canada | FR 
87654321 | Outlet | Americas | Canada | EN 
87654321 | Outlet | Americas | Canada | FR 
[...] 
14785236 | Outlet | Americas | Canada | EN 
14785236 | Outlet | Americas | Canada | FR 

私はOracle DBで作業しています。

ガイダンスは非常に高く評価されます。

+0

あなたはどのようなDBMSを使用していますか? –

+0

それ以外の場合は、CHANNELテーブルのすべてのチャンネルの行を爆発させたいのですが - それはどういう意味ですか? – TheUknown

+2

データの例と希望の結果の例を投稿できますか? –

答えて

2

私はあなたが条件がチャネル一致(1つのチャネルが参加していることを取得するように)またはproduct.channel is null(すべてのチャンネルが参加し得るように)ここで内部結合を必要だと思う:

SELECT p.product_id, c.channel, c.region, c.country, c.language 
    FROM product p 
    JOIN channel c on c.channel = p.channel OR p.channel IS NULL; 
+0

これはまさに私が求めていたものです!ありがとうございました。 – Delphy

0

まず、 "P.CHANNEL"が正しく見えません。製品は1つのチャンネルしか持てませんか? ProductIdとChannelIdが入っているxrefProductsChannelsテーブルが必要なようです。あなたの質問に答えるために

、これはあなたがすべてのチャネルですべての製品を取得する方法である:

SELECT P.PRODUCT_ID, 
C.CHANNEL, 
C.REGION, 
C.COUNTRY, 
C.LANGUAGE, 
CASE WHEN P.channel = C.channel THEN 1 ELSE 0 END HasChannel 
FROM PRODUCT P 
CROSS JOIN CHANNEL C 
関連する問題