Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL obtém linhas, mas prefere um valor de coluna sobre outro


Isso deve servir:
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

Isso também permite que você tenha vários níveis de prioridade, sendo o mais alto aquele que você deseja retornar (se você tivesse 1 e 2, o 2 seria retornado).

Eu também direi que parece que existem alguns problemas de design no banco de dados. Minha abordagem teria sido:

My_Table (id, name)My_Values ​​(id, priority, value) com um FK em id para id. PKs em id em My_Table e id, prioridade em My_Values. Claro, eu usaria nomes de tabela apropriados também.