简体   繁体   English

相同的SQL查询不同的结果?

[英]same sql query different results ?

I have this Sql query 我有这个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

I have two server : 我有两个服务器:

  1. Version du serveur : 5.7.11-log - MySQL Community Server (GPL) -locally- 服务版本:5.7.11-log-MySQL Community Server(GPL)-本地-
  2. Server version: 10.1.25-MariaDB-1~jessie - mariadb.org binary distribution - host - 服务器版本:10.1.25-MariaDB-1〜jessie-mariadb.org二进制分发版-主机-

When i execute it on these servers, each one of them give me a different result. 当我在这些服务器上执行它时,每个服务器都给我不同的结果。

I think the problem is in the ORDER BY 我认为问题出在ORDER BY

As a solution i made : 作为解决方案,我做了:

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

I am really confused because MySql does not give me any error but gives different result, i have other queries and i am afraid that he is doing the same for them ! 我真的很困惑,因为MySql不会给我任何错误,但是会给出不同的结果,我还有其他查询,而且我担心他会为他们做同样的事情!

You can find the difference using explain report . 您可以使用解释报告找到区别。 Just run explain extended SELECT ID_Partenaire, Nom_Societe... . 只需运行explain extended SELECT ID_Partenaire, Nom_Societe...

Add the limit after the order by block. 在逐个订单之后添加限制。 'limit' and 'order by' is in same level 'limit' done before the 'order by' happen, so give different result 'limit'和'order by'在'order by'发生之前处于同一级别'limit'完成,因此给出不同的结果

try something like this 尝试这样的事情

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