Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询在SQL Server中工作,但在mySQL中不工作_Mysql_Sql Server - Fatal编程技术网

查询在SQL Server中工作,但在mySQL中不工作

查询在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

一家公司有其客户及其订单的记录。我正在写一个查询,以获得那些客户和订单的名称,他们在第一次订单的前十年内拥有最高价格订单。此select查询在SQL Server中运行,但在MySQL中出现错误

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 接近'1 C.名称,O.价格,O.订单\订单日期O,客户C其中 O.价格=第1行的选择


感谢@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毫秒,所以你的解决方案肯定比我好。非常欢迎你。很高兴听到这有帮助: