查询在SQL Server中工作,但在mySQL中不工作
一家公司有其客户及其订单的记录。我正在写一个查询,以获得那些客户和订单的名称,他们在第一次订单的前十年内拥有最高价格订单。此select查询在SQL Server中运行,但在MySQL中出现错误 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 接近'1 C.名称,O.价格,O.订单\订单日期O,客户C其中 O.价格=第1行的选择查询在SQL Server中工作,但在mySQL中不工作,mysql,sql-server,Mysql,Sql Server,一家公司有其客户及其订单的记录。我正在写一个查询,以获得那些客户和订单的名称,他们在第一次订单的前十年内拥有最高价格订单。此select查询在SQL Server中运行,但在MySQL中出现错误 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 接近'1 C.名称,O.价格,O.订单\订单日期O,客户C其中 O.价格=第1行的选择 感谢@Nick,@Shivani的快速支持。更正了我的问题,它正在工作 SELECT C.NAME, O.PRICE, O.ORDE
感谢@Nick,@Shivani的快速支持。更正了我的问题,它正在工作
SELECT C.NAME, O.PRICE, O.ORDER_DATE
FROM ORDERS O, CUSTOMERS C
WHERE O.PRICE = (
SELECT MAX(PRICE)
FROM ORDERS
WHERE ORDER_DATE BETWEEN
(SELECT ORDER_DATE FROM ORDERS ORDER BY ORDER_DATE LIMIT 1)
AND
(SELECT DATE_ADD(ORDER_DATE, INTERVAL 10 YEAR) FROM ORDERS ORDER BY ORDER_DATE LIMIT 1)
)
AND C.ORDER_ID = O.ID order by O.ORDER_DATE;
感谢@Nick,@Shivani的快速支持。更正了我的问题,它正在工作
SELECT C.NAME, O.PRICE, O.ORDER_DATE
FROM ORDERS O, CUSTOMERS C
WHERE O.PRICE = (
SELECT MAX(PRICE)
FROM ORDERS
WHERE ORDER_DATE BETWEEN
(SELECT ORDER_DATE FROM ORDERS ORDER BY ORDER_DATE LIMIT 1)
AND
(SELECT DATE_ADD(ORDER_DATE, INTERVAL 10 YEAR) FROM ORDERS ORDER BY ORDER_DATE LIMIT 1)
)
AND C.ORDER_ID = O.ID order by O.ORDER_DATE;
您可以尝试下面的选项-
SELECT C.NAME, O.PRICE
FROM ORDERS O
INNER JOIN CUSTOMERS C ON C.ORDER_ID = O.ID
/*Comma separated joins are old fashion now.
You should use Standard joining as shown*/
WHERE O.PRICE =
(
SELECT MAX(PRICE)
FROM ORDERS
WHERE ORDER_DATE BETWEEN
(SELECT MIN(ORDER_DATE) FROM ORDERS)
AND
(SELECT DATE_ADD(MIN(ORDER_DATE), INTERVAL 10 year) FROM ORDERS)
/*In selecting date range, you will gain some performance here
As this will select only the minimum date where as you are
selecting all dates first and keeping one row from them
Also you are applying DATE_ADD on all rows of your table
to generate the Upper date range which is also performance issue*/
)
ORDER BY O.ORDER_DATE;
您可以尝试下面的选项-
SELECT C.NAME, O.PRICE
FROM ORDERS O
INNER JOIN CUSTOMERS C ON C.ORDER_ID = O.ID
/*Comma separated joins are old fashion now.
You should use Standard joining as shown*/
WHERE O.PRICE =
(
SELECT MAX(PRICE)
FROM ORDERS
WHERE ORDER_DATE BETWEEN
(SELECT MIN(ORDER_DATE) FROM ORDERS)
AND
(SELECT DATE_ADD(MIN(ORDER_DATE), INTERVAL 10 year) FROM ORDERS)
/*In selecting date range, you will gain some performance here
As this will select only the minimum date where as you are
selecting all dates first and keeping one row from them
Also you are applying DATE_ADD on all rows of your table
to generate the Upper date range which is also performance issue*/
)
ORDER BY O.ORDER_DATE;
mysql不支持Top。像这样使用限制
SELECT C.NAME, O.PRICE
FROM ORDERS O, CUSTOMERS C
WHERE O.PRICE =
(
SELECT MAX(PRICE) FROM ORDERS
WHERE ORDER_DATE BETWEEN
(SELECT ORDER_DATE FROM ORDERS ORDER BY ORDER_DATE LIMIT 1)
AND
(SELECT DATEADD(year, 10, ORDER_DATE) FROM ORDERS ORDER BY ORDER_DATE LIMIT 1)
)
AND C.ORDER_ID = O.ID ORDER BY O.ORDER_DATE;
mysql不支持Top。像这样使用限制
SELECT C.NAME, O.PRICE
FROM ORDERS O, CUSTOMERS C
WHERE O.PRICE =
(
SELECT MAX(PRICE) FROM ORDERS
WHERE ORDER_DATE BETWEEN
(SELECT ORDER_DATE FROM ORDERS ORDER BY ORDER_DATE LIMIT 1)
AND
(SELECT DATEADD(year, 10, ORDER_DATE) FROM ORDERS ORDER BY ORDER_DATE LIMIT 1)
)
AND C.ORDER_ID = O.ID ORDER BY O.ORDER_DATE;
MySQL不支持TOPUse LIMIT而不是TOPSELECT ORDER_DATE FROM ORDERS BY ORDER_DATE LIMIT 1MySQL不支持TOPUse LIMIT而不是TOPSELECT ORDER_DATE FROM ORDERS BY ORDER_DATE LIMIT 1范围不正确,因为我正在过滤10年数据,其中ORDER_DATE介于从ORDERS BY ORDER_DATE LIMIT中选择的ORDER_DATE之间1和从订单中选择订单日期按订单日期限制1范围不正确,因为我正在筛选10年数据,其中订单日期介于从订单中选择订单日期按订单日期限制1和从订单中选择订单日期按订单日期限制1之间,谢谢@mkRabbani,我接受了你的答案,因为它需要2毫秒,而我的答案需要11毫秒,所以你的解决方案肯定比我好。非常欢迎你。很高兴听到它有帮助:谢谢@mkRabbani,我接受了你的答案,因为它需要2毫秒,而我的答案需要11毫秒,所以你的解决方案肯定比我好。非常欢迎你。很高兴听到这有帮助: