J'ai deux tables postgresql:
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
Je veux obtenir chaque adresse IP à partir de login_log
laquelle il n'y a pas de ligne ip_location
.
J'ai essayé cette requête mais cela génère une erreur de syntaxe.
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`
Je me demande également si cette requête (avec des ajustements pour qu'elle fonctionne) est la requête la plus performante à cet effet.
LEFT JOIN
- s'il y a plusieurs lignes correspondantes dans la table de recherche, cela créera une entrée en double dans votre requête principale pour chaque ligne correspondante, ce qui peut ne pas être souhaité.WHERE i.ip IS NULL
, ce qui signifie qu'il n'y a aucune correspondance.A.) La commande N'EST PAS EXISTE, il vous manque le «S».
B.) Utilisez NOT IN à la place
la source
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 ;
Ici, la table testcases1 contient toutes les données et la table executions1 contient des données parmi la table testcases1. Je récupère uniquement les données qui ne sont pas présentes dans la table exections1. (et même je donne quelques conditions à l'intérieur que vous pouvez également donner.) Spécifiez la condition qui ne devrait pas être là dans la récupération des données devrait être entre crochets.
la source
cela peut aussi être essayé ...
la source
WHERE ip_location.ip is null
- comment laWHERE
condition peut-elle être jamais vraie? De plus, la sous-requête n'est pas corrélée.