【发布时间】:2017-11-03 05:44:46
【问题描述】:
我不确定这是否是正确的方法,但我会解释一下情况。
我有两张表,第一张是产品列表,第二张是渠道列表。如果满足连接条件,我想做一个 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 数据库中工作。
非常感谢您的指导。
【问题讨论】:
-
您使用的是什么 DBMS?
-
else I want to explode the rows for every channel in the CHANNEL table- 这是什么意思? -
你能发布一个数据示例和想要的结果示例吗?
-
"如果满足加入条件"?好吧,我只看到两种情况:
product.channel is not null然后它设置为我在频道表中找到的频道,或者product.channel is null然后它当然没有设置为我在频道表中找到的频道。还是我错过了什么? -
啊,所以我理解正确,我的回答解决了你的问题:-)
标签: sql oracle left-join cartesian-product cross-join