请查看以下查询:
INSERT INTO product_filter (product_id,filter_id)
SELECT product_id,
(CASE WHEN price < 100 then 1
WHEN price >= 100 AND price < 500 then 2
WHEN price >= 500 AND price < 1000 then 3
WHEN price >= 1000 AND price < 1500 then 4
WHEN price >= 1500 AND price < 2000 then 5
WHEN price >= 2000 AND price < 2500 then 50
WHEN price >= 2500 AND price < 3000 then 6
ELSE 51 END) AS filter_id
FROM product_special
ORDER BY priority DESC, date_end DESC
LIMIT 1
UNION
SELECT product_id,
(CASE WHEN price < 100 then 1
WHEN price >= 100 AND price < 500 then 2
WHEN price >= 500 AND price < 1000 then 3
WHEN price >= 1000 AND price < 1500 then 4
WHEN price >= 1500 AND price < 2000 then 5
WHEN price >= 2000 AND price < 2500 then 50
WHEN price >= 2500 AND price < 3000 then 6
ELSE 51 END) AS filter_id
FROM product WHERE product_id not IN
(SELECT product_id FROM product_special)
这就是查询应该执行的操作:
- 从product_special表中选择所有特价,并根据价格将它们关联到不同的价格过滤器
- 每种产品可以有多个特价,因此只需选择优先级较高且持续时间较长的一个即可
- 从产品表中选择所有常规价格(仅选择在product_special 表中没有特价的产品),并根据价格将它们关联到不同的价格过滤器
我收到的错误:
错误代码:1221。UNION 和 ORDER BY 的使用不正确
示例数据集:
感谢任何帮助。
最佳答案
当您使用UNION
时查询 LIMIT
或ORDER BY
对于每个单独的查询,您需要使用括号来组织查询,例如
(query 1 with limit order by )
UNION
(query 1 with limit order by )
您可以编写上述查询来避免此错误
INSERT INTO product_filter (product_id,filter_id)
(
SELECT product_id,
(CASE WHEN price < 100 then 1
WHEN price >= 100 AND price < 500 then 2
WHEN price >= 500 AND price < 1000 then 3
WHEN price >= 1000 AND price < 1500 then 4
WHEN price >= 1500 AND price < 2000 then 5
WHEN price >= 2000 AND price < 2500 then 50
WHEN price >= 2500 AND price < 3000 then 6
ELSE 51 END) AS filter_id
FROM product_special
ORDER BY priority DESC, date_end DESC
LIMIT 1 )
UNION
(SELECT product_id,
(CASE WHEN price < 100 then 1
WHEN price >= 100 AND price < 500 then 2
WHEN price >= 500 AND price < 1000 then 3
WHEN price >= 1000 AND price < 1500 then 4
WHEN price >= 1500 AND price < 2000 then 5
WHEN price >= 2000 AND price < 2500 then 50
WHEN price >= 2500 AND price < 3000 then 6
ELSE 51 END) AS filter_id
FROM product WHERE product_id not IN
(SELECT product_id FROM product_special)
)
关于MySQL:使用 ORDER BY 和 UNION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23088818/