sql >> Base de Datos >  >> RDS >> Mysql

Seleccionar cosas que no existen

supongamos que sus etiquetas ('c', 'cg', 'rx') están en una tabla llamada tags_match con la misma estructura que la anterior

entonces podrías hacer esto:

select tr.name 
from tags as tl 
    right join tags_match as tr 
    on tl.name = tr.name
where tl.name is null

Esto encontrará todos los elementos en tags_match que no están en etiquetas, por lo que le daría el resultado deseado, pero desafortunadamente sus etiquetas ('c', 'cg', 'rx') no están en una tabla :(

No importa, podemos usar una subconsulta para 'falsificar' la tabla

select tr.name 
from tags as tl 
    right join (select 'cg' as name 
                union select 'c' as name 
                union select 'rx' as name) as tr 
    on tl.name = tr.name
where tl.name is null

Aunque es un poco feo, esto funcionará. Si tiene muchos elementos que desea probar, puede considerar crear una tabla temporal real.