Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL erhält Zeilen, bevorzugt aber einen Spaltenwert gegenüber einem anderen

Das sollte es tun:

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

Auf diese Weise können Sie auch mehrere Prioritätsstufen haben, wobei die höchste diejenige ist, die Sie zurückgeben möchten (wenn Sie eine 1 und 2 hätten, würde die 2 zurückgegeben).

Ich werde jedoch auch sagen, dass es so aussieht, als ob es einige Designprobleme in der DB gibt. Mein Ansatz wäre gewesen:

My_Table (ID, Name)My_Values ​​(ID, Priorität, Wert) mit einem FK auf ID zu ID. PKs auf ID in My_Table und ID, Priorität in My_Values. Natürlich würde ich auch passende Tabellennamen verwenden.