Eu tenho duas tabelas postgresql:
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
Quero obter todos os endereços IP dos login_log
quais não há uma linha ip_location
.
Eu tentei essa consulta, mas gera um erro de sintaxe.
SELECT login_log.ip
FROM login_log
WHERE NOT EXIST (SELECT ip_location.ip
FROM ip_location
WHERE login_log.ip = ip_location.ip)
ERROR: syntax error at or near "SELECT" LINE 3: WHERE NOT EXIST (SELECT ip_location.ip`
Também estou me perguntando se essa consulta (com ajustes para fazê-la funcionar) é a consulta com melhor desempenho para essa finalidade.
LEFT JOIN
- se houver várias linhas correspondentes na tabela de pesquisa, isso criará uma entrada duplicada na sua consulta principal para cada linha correspondente, o que pode não ser desejado.WHERE i.ip IS NULL
, o que significa que não há correspondência.A.) O comando NÃO EXISTE, você está perdendo o 'S'.
B.) Em vez disso, use NOT IN
fonte
SELECT * FROM testcases1 t WHERE NOT EXISTS ( SELECT 1
FROM executions1 i WHERE t.tc_id = i.tc_id and t.pro_id=i.pro_id and pro_id=7 and version_id=5 ) and pro_id=7 ;
Aqui a tabela testcases1 contém todos os dados e a tabela executions1 contém alguns dados entre a tabela testcases1. Estou recuperando apenas os dados que não estão presentes na tabela exections1. (e até eu estou fornecendo algumas condições internas que você também pode fornecer.) especifique a condição que não deve estar presente na recuperação de dados e deve estar entre colchetes.
fonte
isso também pode ser tentado ...
fonte
WHERE ip_location.ip is null
- como aWHERE
condição pode ser verdadeira? Além disso, a subconsulta não é correlacionada.