Eu quero obter apenas linhas com um valor NULL
e algum outro valor que não seja NULL
para uma coluna de nome de usuário específica.
Se ambas as linhas tiverem null para esse nome de usuário específico ou ambas tiverem alguns valores diferentes de null, ele não deverá aparecer na saída. Se houver mais de duas linhas para o mesmo nome de usuário com nulo e algum outro valor, elas deverão aparecer.
Abaixo está um exemplo de exemplo e saída. Como isso pode ser feito usando a consulta sql?
+----------+-------+
| username | col2 |
+----------+-------+
| a | abc |
| a | ef |
| b | null |
| b | null |
| c | der |
| c | null |
+----------+-------+
resultado
+----------+------+
| username | col2 |
+----------+------+
| c | der |
| c | null |
+----------+------+
Você deve poder usar a agregação condicional para obter o nome de usuário com um valor
col2
enull
.Eu sugiro usar uma cláusula HAVING com as condições. A consulta seria semelhante a:
Consulte SQL Fiddle com demonstração . Essa consulta agrupa seus dados por cada nome de usuário e, em seguida, usa a lógica condicional para verificar se
col2
atende às duas condições desejadas - ondecol2
não é nulo ecol2
é nulo.Você pode usar isso em uma subconsulta, etc., para obter os valores
username
ecol2
:Consulte SQL Fiddle com demonstração .
Se você tiver mais de uma
col2
linha com ambosnull
e outro valor, basta alterar umHAVING
pouco a cláusula:Veja SQL Fiddle com demonstração
Outra solução:
Em uma veia lógica semelhante:
Ainda outra:
Apenas outra maneira de fazer isso:
Este também funciona. Demonstração do SQL Fiddle
Obtenho C1 como o total de linhas para cada nome de usuário, C2 como o total de linhas nulas para cada nome de usuário e comparo esses valores posteriormente.
Eu usaria a subconsulta para selecionar esses nomes de usuário como:
tentei com esse...