简体   繁体   English

MYSQL UNION和ORDER BY无法正常工作

[英]MYSQL UNION and ORDER BY not working

I have a mysql query which is as follows 我有一个mysql查询,如下所示

(SELECT order_product.op_id,
        order_product.ocat_id,
        order_product.op_partnunber,
        order_product.op_name,
        order_product.op_upc,
        order_product.op_desc,
        order_stockavailable.osa_id,
        order_stockavailable.of_id,
        order_stockavailable.osa_stocka,
        order_category.ocat_name
FROM 
    order_product 
    LEFT JOIN order_category 
    ON order_product.ocat_id = order_category.ocat_id
    LEFT JOIN order_stockavailable 
    ON  order_product.op_id = order_stockavailable.op_id)
UNION 
(SELECT order_product.op_id,
        order_product.ocat_id,
        order_product.op_partnunber,
        order_product.op_name,
        order_product.op_upc,
        order_product.op_desc,
        order_stockavailable_attributes.id,
        order_stockavailable_attributes.of_id,
        order_stockavailable_attributes.opap_stock,
        order_category.ocat_name
FROM order_product 
    LEFT JOIN order_category 
    ON order_product.ocat_id = order_category.ocat_id
    LEFT JOIN order_stockavailable 
    ON  order_product.op_id = order_stockavailable.op_id 
    LEFT JOIN order_stockavailable_attributes 
    ON  order_product.op_id = order_stockavailable_attributes.op_id)
ORDER BY order_product.op_name

The query is givng error, T 查询是givng错误,T

Table 'order_product' from one of the SELECTs cannot be used in global ORDER clause

I checked the MYSQL manual, but am not getting any clue, any help would be really great. 我检查了MYSQL手册,但没有得到任何线索,任何帮助都会非常棒。

SELECT * 
FROM (
    SELECT order_product.op_id,
            order_product.ocat_id,
            order_product.op_partnunber,
            order_product.op_name,
            order_product.op_upc,
            order_product.op_desc,
            order_stockavailable.osa_id,
            order_stockavailable.of_id,
            order_stockavailable.osa_stocka,
            order_category.ocat_name
    FROM 
        order_product 
        LEFT JOIN order_category 
        ON order_product.ocat_id = order_category.ocat_id
        LEFT JOIN order_stockavailable 
        ON  order_product.op_id = order_stockavailable.op_id
    UNION 
    SELECT order_product.op_id,
            order_product.ocat_id,
            order_product.op_partnunber,
            order_product.op_name,
            order_product.op_upc,
            order_product.op_desc,
            order_stockavailable_attributes.id,
            order_stockavailable_attributes.of_id,
            order_stockavailable_attributes.opap_stock,
            order_category.ocat_name
    FROM order_product 
        LEFT JOIN order_category 
        ON order_product.ocat_id = order_category.ocat_id
        LEFT JOIN order_stockavailable 
        ON  order_product.op_id = order_stockavailable.op_id 
        LEFT JOIN order_stockavailable_attributes 
        ON  order_product.op_id = order_stockavailable_attributes.op_id
) t
ORDER BY op_name

Btw: there is no need to put the individual SELECTs of a UNION into brackets. 顺便说一句:没有必要将UNION的各个SELECT放入括号中。

Try the following syntax? 请尝试以下语法?

SELECT
  x, y
FROM
(
  SELECT x, y FROM z
  UNION
  SELECT a, b FROM c
)
ORDER BY
  x, y

Try 尝试

order by op_name

instead of 代替

ORDER BY order_product.op_name
SELECT * 
FROM  (SELECT order_product.op_id,
      ...
      FROM 
      ... )
      UNION 
      (SELECT order_product.op_id,
      ...
      FROM order_product 
      ... ) U
ORDER BY op_name;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM