Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL ottiene le righe ma preferisce un valore di colonna rispetto a un altro

Questo dovrebbe farlo:

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

Ciò ti consente anche di avere più livelli di priorità con il più alto che è quello che vuoi restituire (se avessi un 1 e 2, il 2 verrebbe restituito).

Dirò anche però che sembra che ci siano alcuni problemi di progettazione nel DB. Il mio approccio sarebbe stato:

My_Table (id, name)My_Values ​​(id, priority, value) con un FK da id a id. PK su id in My_Table e id, priorità in My_Values. Ovviamente userei anche nomi di tabelle appropriati.