Como posso obter todos os valores de 1 coluna, que não têm (ou têm) um valor específico em uma de suas linhas?
Por exemplo, considere a tabela de exemplo:
| ColA | ColB |
---------------
| aaa1 | zzz1 |
| aaa1 | zzz2 |
| aaa1 | zzz1 |
| aaa2 | zzz3 |
...
Desejo obter cada um dos valores de ColA, onde o conjunto group by ColA
não contém uma linha com um valor específico em ColB. ou seja
select ColA from test group by ColA not containing ColB like 'zzz2'
Infelizmente, até onde eu sei, não há uma palavra- containing
chave no MySQL. Então, o que posso fazer em vez disso? Existe alguma maneira de dizer having
para filtrar por outra coluna?
Isso é um anti-semijoin. Pode ser escrito com
NOT IN
,LEFT JOIN / WHERE IS NULL
ouNOT EXISTS
:Você também pode usar
GROUP BY
com umaCASE
expressão: