/ / MySQL - Como consultar um valor, mas o padrão para outro? - mysql

MySQL - Como consultar um valor, mas o padrão para outro? - mysql

Eu fiz a pergunta sobre várias linhas em um segmento anterior, mas agora preciso saber sobre uma única linha. Esta é uma consulta de exemplo:

SELECT * FROM table1 WHERE this = 5 LIMIT 1

Mas se não houver linhas encontradas, então eu encontraria o registro com um valor diferente:

SELECT * FROM table1 WHERE this = 1 LIMIT 1

Então, o que eu quero é, encontrar uma linha com este tendo o valor de 5, se não for encontrado, então padrão para encontrar uma linha com um valor de 1. Como faço isso em uma única consulta? Uma instrução OR funcionaria desse jeito?

SELECT * FROM table1 WHERE this = 5 OR this = 1 LIMIT 1

A ordem da instrução OR tentaria encontrarqualquer linha com o valor de 5, se encontrado, ele irá parar e retornar a linha? Se não for encontrado, procure 1 e, em seguida, retorne essa linha? Se não, como faço isso com uma única consulta onde ele procura por um valor, se não for encontrado o padrão para encontrar outro valor?

Eu estava pensando nessa consulta:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this ASC LIMIT 1

No entanto, essa consulta sempre retornaria o valor com 1 se ambos os valores fossem encontrados corretamente? Então eu tentei isso:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

Mas isso sempre retornaria o valor de 5 se ambas as linhas fossem encontradas corretas?

Respostas:

1 para resposta № 1

Sua pergunta parece priorizar a pesquisapara 5 e somente se não for encontrado, procure 1. Por isso, sua segunda solução se encaixa bem na exigência. Ele retornará o valor de 5, independentemente de 5 ser encontrado apenas ou de 5 e 1 existirem.

a segunda opção

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

0 para resposta № 2

Tente isso

SELECT *
FROM table1 tab
WHERE tab.this = IF((SELECT COUNT(*)
FROM table1
WHERE this = 5) > 0, 5, 1)

A consulta dentro do IF está verificando a contagem.

Não tenho certeza sobre o desempenho, mas acho que isso resolve o problema.