Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL obtient des lignes mais préfère une valeur de colonne à une autre

Cela devrait le faire :

SELECT
     T1.id,
     T1.name,
     T1.value,
     T1.priority
FROM
     My_Table T1
LEFT OUTER JOIN My_Table T2 ON
     T2.name = T1.name AND
     T2.priority > COALESCE(T1.priority, -1)
WHERE
     T2.id IS NULL

Cela vous permet également d'avoir plusieurs niveaux de priorité, le plus élevé étant celui que vous souhaitez renvoyer (si vous aviez un 1 et un 2, le 2 serait renvoyé).

Je dirai aussi cependant qu'il semble qu'il y ait des problèmes de conception dans la base de données. Mon approche aurait été :

My_Table (id, name)My_Values ​​(id, priority, value)avec un FK sur id à id. PK sur id dans My_Table et id, priorité dans My_Values. Bien sûr, j'utiliserais aussi des noms de table appropriés.