【发布时间】:2020-03-07 07:50:26
【问题描述】:
我在 MYSQL 中有一个查询,它计算来自特定供应商的 products 和 product_status,如 Live, Pause, soldout, Partial-Soldout 等。查询包括子查询,但在 Mysql 中完美运行。对于 Redshift (Postgre v8.x),它会给出错误 correlated subquery pattern is not supported due to internal error
查询 (POSTGRES)
SELECT COUNT(CASE WHEN (vendor_id = 6 AND status = 1) THEN 1 ELSE NULL END) AS "vex",
COUNT(CASE WHEN (vendor_id = 6 AND status = 1 AND p.p_id IN (SELECT pov.p_id FROM product_option_value pov WHERE pov.p_id AND p.quantity != pov.quantity AND pov.quantity = 0 GROUP BY pov.p_id)) THEN 1 ELSE NULL END) AS "vex-Partial-Soldout",
COUNT(CASE WHEN (vendor_id = 6 AND status = 1 AND p.quantity = 0) THEN 1 ELSE NULL END) AS "vex-Soldout",
COUNT(CASE WHEN (vendor_id = 5 AND status = 1) THEN 1 ELSE NULL END) AS "vey-DXB",
COUNT(CASE WHEN (vendor_id = 5 AND status = 1 AND p.p_id IN (SELECT pov.p_id FROM product_option_value pov WHERE pov._id AND p.quantity != pov.quantity AND pov.quantity = 0 GROUP BY pov.p_id)) THEN 1 ELSE NULL END) AS "vey-Partial-Soldout",
COUNT(CASE WHEN (vendor_id = 5 AND status = 1 AND p.quantity = 0) THEN 1 ELSE NULL END) AS "vey-Soldout"
FROM product p
表结构
//Product p table
* p_id * model * vendor_id * status * Quantity *
* 1001 * HB1 * 1 * 1 * 10 *
* 1002 * HB2 * 6 * 1 * 17 *
* 1003 * HB3 * 5 * 1 * 19 *
* 1004 * HB4 * 2 * 1 * 3 *
* 1005 * HB5 * 1 * 1 * 8 *
* 1006 * HB6 * 6 * 1 * 55 *
* 1007 * HB7 * 3 * 1 * 32 *
* 1008 * HB8 * 5 * 1 * 6 *
* 1009 * HB9 * 5 * 1 * 10 *
//product_option_value pov table
* pov_id * p_id * opt_id * quantity *
* 1 * 1001 * 11 * 10 *
* 2 * 1002 * 11 * 17 *
* 3 * 1003 * 11 * 0 *
* 4 * 1004 * 11 * 3 *
* 5 * 1005 * 11 * 8 *
* 6 * 1006 * 11 * 0 *
* 7 * 1007 * 11 * 32 *
* 8 * 1008 * 11 * 6 *
* 9 * 1009 * 11 * 0 *
Group by 在子查询中是必需的,所以左连接也不能解决问题。
【问题讨论】:
-
将查询缩小到 SELECT 子句中的一列,然后缩小表达式,直到找到导致问题的特定元素
-
仅供参考,将
SELECT语句放在 Select 行中是编写 SQL 查询的一种非常低效的方式。它实际上需要为外部查询的每一行运行一个查询。您可能可以将其重写为使用LEFT OUTER JOIN,然后测试连接的列是否为NULL。 -
@JohnRotenstein,我是你的忠实粉丝..我关注了你的很多答案......我尝试了
LEFT JOIN,但查询需要按产品 ID 分组 -
您可以对查询(包括 GROUP BY)执行 LEFT OUTER JOIN。
标签: mysql sql postgresql amazon-redshift