Maison  >  Questions et réponses  >  le corps du texte

Erreur MySQL lors de l'utilisation de la requête DISTINCT et ORDER BY

J'essaie d'effectuer une requête DISTICNT sur une colonne et de trier par une autre colonne qui ne figure pas dans une instruction SELECT. J'obtiens cette erreur :

Échec de la requête SQLSTATE[HY000] : erreur générale : 3065 ​​Expression #1 Clause ORDER BY absente de la liste SELECT, colonne référencée 'midnites_midNite.product_in_category.sortOrder' n'est pas présent Sélectionnez la liste ; ceci n'est pas compatible avec DISTINCT

J'ai un exemple de table products_in_category avec quatre colonnes : ID, cat_ID, product_ID et sortOrder. J'ai essayé d'effectuer une requête Product_ID WHERE cat_ID = 9 DISTICNT et de trier par la valeur de requête associée dans la colonne sortOrder.

ID      cat_ID  product_ID  sortOrder
+----------+--------+-----------+--------+
|    1     |    9   |     5     |    3   |
+----------+--------+-----------+--------+
|    2     |    9   |     26    |    1   |
+----------+--------+-----------+--------+
|    3     |    9   |     5     |    2   |
+----------+--------+-----------+--------+
|    4     |    9   |     7     |    4   |
+----------+--------+-----------+--------+
|    5     |    9   |     5     |    5   |
+----------+--------+-----------+--------+
|    6     |   22   |     4     |    6   |
+----------+--------+-----------+--------+

SELECT DISTINCT product_ID 
FROM product_in_category 
WHERE cat_ID = 9

Cette requête renvoie 3 valeurs 5, 26, 7, ce qui est correct, mais je dois également trier par leur valeur sortOrder associée. Si j'utilise cette requête ci-dessous, elle renvoie 5 valeurs, ce qui est incorrect car toutes les valeurs de la colonne sortOrder sont uniques.

SELECT DISTINCT product_ID, 
                sortOrder 
FROM product_in_category 
WHERE cat_ID = 9 
ORDER BY sortOrder

Si j'utilise la requête ci-dessous, MySQL renvoie cette erreur et je comprends pourquoi, sortOrder n'est pas inclus dans l'instruction SELECT. Je ne sais pas comment effectuer une requête DISTICNT sur la colonne Product_ID et trier selon la valeur sortOrder associée de la valeur renvoyée.

Échec de la requête SQLSTATE[HY000] : erreur générale : 3065 ​​Expression #1 Clause ORDER BY absente de la liste SELECT, colonne référencée 'midnites_midNite.product_in_category.sortOrder' n'est pas présent Sélectionnez la liste ; ceci n'est pas compatible avec DISTINCT

SELECT DISTINCT product_ID 
FROM product_in_category 
WHERE cat_ID = 9
ORDER BY sortOrder

J'ai essayé diverses déclarations d'union, de jointure et de sélection de différentes manières. J'espère que cela est compréhensible et j'apprécie toute aide que vous pouvez apporter ! ! !

P粉541551230P粉541551230183 Il y a quelques jours438

répondre à tous(1)je répondrai

  • P粉536909186

    P粉5369091862024-04-01 09:29:51

    SELECT product_ID, MIN(sortOrder) AS minSortOrder
        FROM product_in_category
        WHERE cat_ID = 9
        GROUP BY product_ID;

    répondre
    0
  • Annulerrépondre