下面是我要完成的任务的简要说明;我的问题如下。
我有两张table,一张有500种产品 product_limit500
,还有一个命令 order_limit1000
.
我的目标是为每个订单创建一个包含所有500个产品的表,所有这些产品的顺序相同(如 order one followed by all other products
,然后 order two followed by the products in the same order
).
这是我尝试使用的查询。
SELECT
r1.order_id,
r1.product_id,
r1.product_name,
CASE WHEN p1.product_id IN (SELECT
r2.product_id
FROM
order_limit1000 r2
WHERE
r2.order_id = r1.order_id) THEN 's'
ELSE '?'
END as 'torf'
FROM
order_limit1000 r1,
product_limit500 p1;
这是目前的结果。
order_id product_id product_name torf
5 13176 Bag of Organic Bananas ?
5 13176 Bag of Organic Bananas s
5 13176 Bag of Organic Bananas ?
5 13176 Bag of Organic Bananas ?
5 13176 Bag of Organic Bananas s
5 13176 Bag of Organic Bananas ?
5 13176 Bag of Organic Bananas ?
5 13176 Bag of Organic Bananas ?
5 13176 Bag of Organic Bananas ?
5 13176 Bag of Organic Bananas ?
5 13176 Bag of Organic Bananas s
5 13176 Bag of Organic Bananas ?
...
谢谢你的帮助。
...
现在我用的是500的视图 products
和1000排 orders
,我还在想最后的尺寸是多少 orders
,大概是500k到1mi行。但是我使用的数据集有大约4.5mi行。
预期结果如下所示。
order_id product_id product_name torf
5 123 tomatoes s
5 124 limes ?
...
100 123 tomatoes ?
100 124 limes ?
1条答案
按热度按时间pn9klfpd1#
请不要在表名之间使用逗号,当然也不要用逗号代替
cross join
. 我不知道为什么你会想要每一个产品对每一个订单,但要做到这一点,你需要一个完整的笛卡尔积,因此你需要一个交叉连接。假定order表中已经有一个product\u id,您不需要另一个相关子查询来测试是否应该输出's'或'?'。注意:我假设产品名称来自产品表,而不是订单表。