Mysql 使用内部联接的SQL查询无法正确排序。

Mysql 使用内部联接的SQL查询无法正确排序。,mysql,inner-join,Mysql,Inner Join,我创建了以下SQL查询,以从数据库导出订单数据 SELECT orders.orders_id as uuid, orders.customers_id as order__customer_id, orders.customers_name as order__customer_name, orders.customers_company as order__customer_company, orders.customers_s

我创建了以下SQL查询,以从数据库导出订单数据

SELECT orders.orders_id as uuid,
        orders.customers_id as order__customer_id,
        orders.customers_name as order__customer_name,
        orders.customers_company as order__customer_company,
        orders.customers_street_address as order__customer_street_address,
        orders.customers_suburb as order__customer_suburb,
        orders.customers_city as order__customer_city,
        orders.customers_postcode as order__customer_postcode,
        orders.customers_state as order__customer_state,
        orders.customers_country as order__customer_country,
        orders.customers_telephone as order__customer_telephone,
        orders.customers_email_address as order__customer_email_address,
        orders.delivery_name as order__delivery_name,
        orders.delivery_company as order__delivery_company,
        orders.delivery_street_address as order__delivery_street_address,
        orders.delivery_suburb as order__delivery_suburb,
        orders.delivery_city as order__delivery_city,
        orders.delivery_postcode as order__delivery_postcode,
        orders.delivery_state as order__delivery_state,
        orders.delivery_country as order__delivery_country,
        orders.billing_name as order__billing_name,
        orders.billing_company as order__billing_company,
        orders.billing_street_address as order__billing_street_address,
        orders.billing_suburb as order__billing_suburb,
        orders.billing_city as order__billing_city,
        orders.billing_postcode as order__billing_postcode,
        orders.billing_state as order__billing_state,
        orders.billing_country as order__billing_country,
        orders.payment_method as order__payment_method,
        orders.last_modified as order__last_modified,
        orders.date_purchased as order__date_purchased,
        orders.orders_status as order__order_status,
        orders_status.orders_status_name as order__order_status_name,
        orders.orders_date_finished as order__date_finished,
        orders.currency as order__currency,
        orders.currency_value as order__currency_value,
        ot1.orders_id,
        value AS ot_subtotal,
        ot2.ot_shipping,
        ot3.ot_total
        FROM orders, orders_status, orders_total as ot1 
        INNER JOIN ( SELECT orders_id, value AS ot_shipping FROM orders_total WHERE class='ot_shipping' ) AS ot2 ON ot1.orders_id=ot2.orders_id AND ot1.class='ot_subtotal' 
        INNER JOIN ( SELECT orders_id, value AS ot_total FROM orders_total WHERE class='ot_total' ) AS ot3 ON ot1.orders_id=ot3.orders_id AND ot1.class='ot_subtotal'
        WHERE ot1.orders_id = ot2.orders_id and orders.orders_status = orders_status.orders_status_id;
它的工作非常出色,除了它为每一条记录创建了4行。目前有4个订单,因此有16行17包括列名,而只有4行5包括列名

谢谢

当它应该只有4行5包括列名时,因为只有4个顺序


非常感谢

尝试在查询中使用SELECT DISTINCT

SELECT DISTINCT orders.orders_id as uuid...
FROM orders, orders_status, orders_total as ot1 
INNER JOIN ( SELECT orders_id, value AS ot_shipping FROM orders_total WHERE class='ot_shipping' ) AS ot2 ON ot1.orders_id=ot2.orders_id AND ot1.class='ot_subtotal' 
INNER JOIN ( SELECT orders_id, value AS ot_total FROM orders_total WHERE class='ot_total' ) AS ot3 ON ot1.orders_id=ot3.orders_id AND ot1.class='ot_subtotal'
WHERE ot1.orders_id = ot2.orders_id and orders.orders_status = orders_status.orders_status_id;
编辑:

我在所有表上使用内部联接而不是“,”将“从”部分更新到下面。我不知道您的表结构,所以我猜测您的联接字段

FROM orders
INNER JOIN orders_status
    ON orders.orders_status = orders_status.orders_status_id
INNER JOIN orders_total as ot1 
    ON orders.orders_id = ot1.orders_id
INNER JOIN ( SELECT orders_id, value AS ot_shipping FROM orders_total WHERE class='ot_shipping' ) AS ot2 
    ON ot1.orders_id=ot2.orders_id 
INNER JOIN ( SELECT orders_id, value AS ot_total FROM orders_total WHERE class='ot_total' ) AS ot3 
    ON ot1.orders_id=ot3.orders_id
WHERE ot1.class='ot_subtotal'

尝试在查询中使用SELECT DISTINCT

SELECT DISTINCT orders.orders_id as uuid...
FROM orders, orders_status, orders_total as ot1 
INNER JOIN ( SELECT orders_id, value AS ot_shipping FROM orders_total WHERE class='ot_shipping' ) AS ot2 ON ot1.orders_id=ot2.orders_id AND ot1.class='ot_subtotal' 
INNER JOIN ( SELECT orders_id, value AS ot_total FROM orders_total WHERE class='ot_total' ) AS ot3 ON ot1.orders_id=ot3.orders_id AND ot1.class='ot_subtotal'
WHERE ot1.orders_id = ot2.orders_id and orders.orders_status = orders_status.orders_status_id;
编辑:

我在所有表上使用内部联接而不是“,”将“从”部分更新到下面。我不知道您的表结构,所以我猜测您的联接字段

FROM orders
INNER JOIN orders_status
    ON orders.orders_status = orders_status.orders_status_id
INNER JOIN orders_total as ot1 
    ON orders.orders_id = ot1.orders_id
INNER JOIN ( SELECT orders_id, value AS ot_shipping FROM orders_total WHERE class='ot_shipping' ) AS ot2 
    ON ot1.orders_id=ot2.orders_id 
INNER JOIN ( SELECT orders_id, value AS ot_total FROM orders_total WHERE class='ot_total' ) AS ot3 
    ON ot1.orders_id=ot3.orders_id
WHERE ot1.class='ot_subtotal'

您似乎缺少任何将订单链接到订单总数的连接。如果使用显式连接语法重写,而不是混合使用新样式和旧样式,这将更加清晰

FROM   orders
       INNER JOIN orders_status ON orders.orders_status = orders_status.orders_status_id
       INNER JOIN orders_total as ot1 /*<--Missing Condition here
                                          ON orders.orders_id = ot1.orders_id */
       INNER JOIN (SELECT orders_id,
                          value AS ot_shipping
                   FROM   orders_total
                   WHERE  class = 'ot_shipping') AS ot2
         ON ot1.orders_id = ot2.orders_id
       INNER JOIN (SELECT orders_id,
                          value AS ot_total
                   FROM   orders_total
                   WHERE  class = 'ot_total') AS ot3
         ON ot1.orders_id = ot3.orders_id

您似乎缺少任何将订单链接到订单总数的连接。如果使用显式连接语法重写,而不是混合使用新样式和旧样式,这将更加清晰

FROM   orders
       INNER JOIN orders_status ON orders.orders_status = orders_status.orders_status_id
       INNER JOIN orders_total as ot1 /*<--Missing Condition here
                                          ON orders.orders_id = ot1.orders_id */
       INNER JOIN (SELECT orders_id,
                          value AS ot_shipping
                   FROM   orders_total
                   WHERE  class = 'ot_shipping') AS ot2
         ON ot1.orders_id = ot2.orders_id
       INNER JOIN (SELECT orders_id,
                          value AS ot_total
                   FROM   orders_total
                   WHERE  class = 'ot_total') AS ot3
         ON ot1.orders_id = ot3.orders_id

给我和上面一样的问题。16行,而不是4行。我在上面添加了一个新的FROM语句。给出了与上面相同的问题。16行,而不是4行。我在上面添加了一个新的FROM语句。您可以在不定义OTU SHIPING、OTU total等值的情况下执行此操作,并且仍然通过订单id进行排序吗?您可以在不定义OTU SHIPING、OTU total等值的情况下执行此操作,并且仍然通过订单id进行排序吗?