簡體   English   中英

相同的SQL查詢不同的結果?

[英]same sql query different results ?

我有這個SQL查詢

SELECT tt.ID_Partenaire, tt.Nom_Societe,tt.Image_Societe, tt.id_activite 
                FROM affiliate AS a 
                RIGHT JOIN 
                  (SELECT partenaires.ID_Partenaire, 
                  partenaires.Nom_Societe, partenaires.Image_Societe, partenaires.id_activite,
                        IFNULL(SUM(c.montant_real),0) AS mt1 
                    FROM partenaires
                        LEFT JOIN commande AS c 
                    ON partenaires.ID_Partenaire=c.id_partenaire 
                    GROUP BY partenaires.ID_Partenaire 
                  )AS tt 
            ON a.id_partenaire= tt.ID_Partenaire 
            GROUP BY tt.ID_Partenaire 
            ORDER BY (IFNULL(SUM(a.montat),0) + mt1) DESC 
            LIMIT 20

我有兩個服務器:

  1. 服務版本:5.7.11-log-MySQL Community Server(GPL)-本地-
  2. 服務器版本:10.1.25-MariaDB-1〜jessie-mariadb.org二進制分發版-主機-

當我在這些服務器上執行它時,每個服務器都給我不同的結果。

我認為問題出在ORDER BY

作為解決方案,我做了:

SELECT ID_Partenaire, Nom_Societe, Image_Societe, id_activite 
      FROM (SELECT tt.ID_Partenaire, tt.Nom_Societe,tt.Image_Societe, 
             tt.id_activite, 
             (IFNULL(SUM(a.montat),0) + mt1) as mm
                FROM affiliate AS a 
                RIGHT JOIN 
                  (SELECT partenaires.ID_Partenaire, 
                       partenaires.Nom_Societe, partenaires.Image_Societe, 
                       partenaires.id_activite,
                        IFNULL(SUM(c.montant_real),0) AS mt1 
                    FROM partenaires
                        LEFT JOIN commande AS c 
                    ON partenaires.ID_Partenaire=c.id_partenaire 
                    GROUP BY partenaires.ID_Partenaire 
                  )AS tt 
            ON a.id_partenaire= tt.ID_Partenaire 
            GROUP BY tt.ID_Partenaire 
            ORDER BY mm DESC 
            LIMIT 20) AS k

我真的很困惑,因為MySql不會給我任何錯誤,但是會給出不同的結果,我還有其他查詢,而且我擔心他會為他們做同樣的事情!

您可以使用解釋報告找到區別。 只需運行explain extended SELECT ID_Partenaire, Nom_Societe...

在逐個訂單之后添加限制。 'limit'和'order by'在'order by'發生之前處於同一級別'limit'完成,因此給出不同的結果

嘗試這樣的事情

SELECT ID_Partenaire,
  Nom_Societe,
  Image_Societe,
  id_activite
FROM
  (SELECT tt.ID_Partenaire,
    tt.Nom_Societe,
    tt.Image_Societe,
    tt.id_activite,
    (IFNULL(SUM(a.montat),0) + mt1) AS mm
  FROM affiliate                    AS a
  RIGHT JOIN
    (SELECT partenaires.ID_Partenaire,
      partenaires.Nom_Societe,
      partenaires.Image_Societe,
      partenaires.id_activite,
      IFNULL(SUM(c.montant_real),0) AS mt1
    FROM partenaires
    LEFT JOIN commande AS c
    ON partenaires.ID_Partenaire=c.id_partenaire
    GROUP BY partenaires.ID_Partenaire
    )AS tt ON a.id_partenaire= tt.ID_Partenaire
  GROUP BY tt.ID_Partenaire
  ORDER BY mm DESC
  ) AS k LIMIT 20  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM