MySQL:使用ORDERBY和UNION
请查看以下查询:MySQL:使用ORDERBY和UNION,mysql,e-commerce,opencart,mysql-workbench,Mysql,E Commerce,Opencart,Mysql Workbench,请查看以下查询: 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 th
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表中选择所有特殊价格,并根据价格将其关联到不同的价格过滤器
每种产品都可以有多种特殊价格,所以只需选择优先级更高、持续时间更长的产品即可
从产品表中选择所有常规价格,仅选择那些在产品\u特殊表中没有特殊价格的价格,并根据价格将其关联到不同的价格过滤器
我收到的错误信息:
错误代码:1221。UNION和ORDER BY的用法不正确
样本数据集:
感谢您的帮助 当您对每个单独的查询使用带有LIMIT或ORDER BY的UNION查询时,您需要使用括号组织查询,如
(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)
)
您需要在第一个查询中使用ORDER BY和LIMIT的子查询 大概是这样的:
INSERT INTO product_filter (product_id,filter_id)
SELECT * FROM
(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) a
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)
您应该将括号括起来,以便对单个查询使用顺序/限制 比如说
(SELECT * FROM table1 WHERE ... ORDER BY field1 LIMIT 0, 1)
UNION
(SELECT * FROM table1 WHERE ...)
如果使用括号外的Order,则它适用于联合结果谢谢,错误现在消失了。我只是不知道为什么查询没有做它应该做的事情@farjam您能提供两个表的样本数据集而不是整个数据集吗?插入后,只需一个样本和所需的结果集看起来像product_filter,很容易看到结果on@M哈立德·朱奈德,我把它们附在问题上了,谢谢。它们是CSV文件。谢谢,错误现在消失了。我只是不知道为什么查询没有做它应该做的事情。