Tengo dos tablas postgresql:
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
Quiero obtener todas las direcciones IP desde las login_log
que no haya una fila ip_location
.
Intenté esta consulta pero arroja un error de sintaxis.
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`
También me pregunto si esta consulta (con ajustes para que funcione) es la mejor consulta para este propósito.
LEFT JOIN
: si hay varias filas coincidentes en la tabla de búsqueda, esto creará una entrada duplicada en su consulta principal para cada fila coincidente, lo que puede no ser deseado.WHERE i.ip IS NULL
, lo que significa que no hay coincidencia en absoluto.A.) El comando NO EXISTE, te falta la 'S'.
B.) Use NOT IN en su lugar
fuente
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 ;
Aquí la tabla testcases1 contiene todos los datos y la tabla ejecuciones1 contiene algunos datos entre la tabla testcases1. Estoy recuperando solo los datos que no están presentes en la tabla exections1. (e incluso estoy dando algunas condiciones dentro de las que también puede dar). Especifique la condición que no debería estar allí en la recuperación de datos debe estar entre paréntesis.
fuente
esto también se puede probar ...
fuente
WHERE ip_location.ip is null
- ¿Cómo puedeWHERE
ser cierta la condición? Además, la subconsulta no está correlacionada.