sql >> Base de Datos >  >> RDS >> Mysql

MySQL obtiene filas pero prefiere un valor de columna sobre otro

Esto debería hacerlo:

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

Esto también le permite tener múltiples niveles de prioridad, siendo el más alto el que desea devolver (si tuviera un 1 y un 2, se devolvería el 2).

Sin embargo, también diré que parece que hay algunos problemas de diseño en la base de datos. Mi enfoque habría sido:

My_Table (id, nombre) My_Values ​​(id, prioridad, valor) con un FK en id a id. PK en id en My_Table e id, prioridad en My_Values. Por supuesto, también usaría nombres de tabla apropiados.