Existe uma maneira de apenas SELECT
linhas com determinados dados em uma coluna, sem usar WHERE
?
por exemplo, se eu tivesse isso:
SELECT * FROM Users
WHERE town = 'Townsville'
existe uma maneira de implementar a WHERE
cláusula na SELECT
declaração?
algo como
SELECT *, town('Townsville') FROM Users
É uma pergunta bizarra, mas é uma pergunta que meus colegas me perguntaram
sql-server
Josh Stevenson
fonte
fonte
Respostas:
Não tenho certeza se esse é o tipo de coisa louca que você estava procurando ....
Disclaimer : Eu não tenho absolutamente nenhuma idéia de por que você iria querer usar isso.
fonte
Dados
Soluções alternativas
Reter duplicados
Resultado:
Para o exemplo final:
Experimente aqui: Stack Exchange Data Explorer
fonte
GROUP BY
soluções, você também pode adicionar a PK no grupo por lista (para ter 100% de certeza de que as consultas retornam o mesmo número de linhas que o WHERE). Supondo, é claro, que exista um PK;)Outra maneira.
( Reutilizando os dados de exemplo de Paul White )
fonte
"Just for fun" você pode usar um
order by
comtop(1) with ties
Isso ordenará todas as linhas com a
Townsville
primeira, pois o caso retorna1
setown = 'Townsville'
. Todas as outras linhas terão um2
retorno pelo caso.o
with ties
cláusula faz com que a consulta retorne todas as linhas que estão "empatadas" para o último lugar nas linhas retornadas. Usartop(1)
em combinação comwith ties
retornará todas as linhas que tenham o mesmo valor que a primeira linha na expressão usada na cláusula order by.Observe que, como Martin Smith apontou em um comentário, ele retornará todas as linhas se você solicitar uma cidade que não exista na tabela.
Se você não tem medo das coisas XML dos bancos de dados, pode usar um predicado na função nodes ().
Emprestando a configuração de Paul White.
Outra versão com
top
eorder by
que realmente funciona ao procurar cidades não existentes.fonte
Você tem duas coisas diferentes aqui.
Restringirá o número de linhas retornadas apenas para aquelas em que cidade =
Townsville
Vai passar o literal
Townsville
para uma função chamadatown
. Ele não restringirá as linhas retornadas pela consulta e, de fato, se a função retornar algo além de um único valor, você receberá um erro.Existem outras maneiras de restringir o número de linhas que você recebe de uma consulta. A cláusula HAVING, por exemplo. Mas tem vários outros requisitos.
Ou um INNER JOIN, embora este seja um pouco estranho se você não tiver uma segunda tabela.
fonte
Aqui está um exemplo usando uma expressão de tabela comum (CTE).
fonte
Bem, você poderia fazer isso:
A rigor, você não está usando a cláusula WHERE
fonte
Aqui está uma maneira completamente
idiotade fazer isso que eu ainda não vejo ...Não consigo imaginar por que isso não foi a primeira coisa a ser sugerida. :)
fonte
Todas as cidades além de Townsville seriam nulas. Problema resolvido.
fonte