2017-10-17 4 views
0

je la requête suivante:requêtes affiche données différentes à chaque fois que je lance dans Mysql

SELECT pr_production_units_details.id AS idProductionUnit, 
pr_production_units_details.production_units_detail AS productionUnit, 
IF(pr_varieties.variety IS NULL, 'SIN SEMBRAR O ERR', pr_varieties.variety) 
AS variety 
FROM pr_production_units_details 
LEFT JOIN 

(SELECT MAX(sw_sowing.id) AS ids, sw_sowing.id_production_unit_detail, 
sw_sowing.id_variety 
FROM sw_sowing 
WHERE sw_sowing.status != 0 
AND sw_sowing.id_tenant = 1 
AND YEARWEEK(sw_sowing.date) <= 201741 
GROUP BY sw_sowing.id_production_unit_detail, id_variety 
ORDER BY ids DESC 
) AS sw 

ON pr_production_units_details.id = sw.id_production_unit_detail 
INNER JOIN pr_varieties ON sw.id_variety = pr_varieties.id 
WHERE pr_production_units_details.id_grouper_detail = 1 
AND pr_production_units_details.status = 100 
AND pr_production_units_details.id_tenant = 1 
GROUP BY pr_production_units_details.id 

qui me amène le résultat suivant:

------------------------------------------------ 
    idProductionUnit | productionUnit | variety 
------------------------------------------------ 
     1   |  1  | YELLOW 
------------------------------------------------ 
     2   |  2  | YELLOW 
------------------------------------------------ 
     3   |  3  | YELLOW 
------------------------------------------------ 

Le résultat ci-dessus est très bien, mais à chaque fois Je lance la requête, la colonne de variété change ses valeurs, qui est:

------------------------------------------------ 
    idProductionUnit | productionUnit | variety 
------------------------------------------------ 
     1   |  1  | YELLOW 
------------------------------------------------ 
     2   |  2  | BLUE 
------------------------------------------------ 
     3   |  3  | YELLOW 
------------------------------------------------ 

aussi me donne le résultat suivant:

------------------------------------------------ 
    idProductionUnit | productionUnit | variety 
------------------------------------------------ 
     1   |  1  | BLUE 
------------------------------------------------ 
     2   |  2  | YELLOW 
------------------------------------------------ 
     3   |  3  | YELLOW 
------------------------------------------------ 

Je ne sais pas si elle doit être vu par l'ORDER BY ou GROUP BY, mais je n'ai pas compris parce qu'il me montre des données différentes.

J'espère que vous pouvez m'aider!

Merci!

+0

Ce GROUP BY est invalide. Suscitera une erreur sur les versions les plus récentes de MySQL (sauf en mode compatibilité), et retournera des données imprévisibles avec des versions plus anciennes. La règle GROUP BY générale dit: "Si une clause GROUP BY est spécifiée, chaque référence de colonne dans la liste SELECT doit soit identifier une colonne de regroupement soit être l'argument d'une fonction set." – jarlh

+0

Comme @jarlh a dit, vous devez utiliser une fonction d'agrégation ou de groupe sur tous dans la liste des colonnes de sélection –

+0

Je suis désolé, je suis nouveau dans mysql pouvez-vous me donner un exemple s'il vous plaît! @jarlh –

Répondre

0

Je peux résoudre mon problème, je change la requête comme ceci:

SELECT pr_production_units_details.id AS idProductionUnit, pr_production_units_details.production_units_detail AS productionUnit, pr_varieties.variety 
FROM (SELECT MAX(sw_sowing.id) AS id 
      FROM sw_sowing 
      WHERE sw_sowing.status != 0 
      AND sw_sowing.id_tenant = 1 
      AND YEARWEEK(sw_sowing.date) <= 201741 
      GROUP BY sw_sowing.id_production_unit_detail 
)AS sw 
INNER JOIN sw_sowing ON sw_sowing.id = sw.id 
INNER JOIN pr_production_units_details ON pr_production_units_details.id = sw_sowing.id_production_unit_detail 
INNER JOIN pr_varieties ON pr_varieties.id = sw_sowing.id_variety 
WHERE sw_sowing.status != 0 
AND sw_sowing.id_tenant =1 
AND pr_production_units_details.id_grouper_detail = 13 
GROUP BY pr_production_units_details.id, variety 

Je suis les instructions sur les commentaires et mon erreur me montre que selon les versions Mysql

Merci pour l'aide!