Ich habe zwei Postgresql-Tabellen:
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
Ich möchte jede IP-Adresse erhalten, von login_log
der keine Zeile vorhanden ist ip_location
.
Ich habe diese Abfrage versucht, aber sie löst einen Syntaxfehler aus.
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`
Ich frage mich auch, ob diese Abfrage (mit Anpassungen, damit sie funktioniert) die leistungsstärkste Abfrage für diesen Zweck ist.
LEFT JOIN
- Wenn die Nachschlagetabelle mehrere übereinstimmende Zeilen enthält, wird in Ihrer Hauptabfrage für jede übereinstimmende Zeile ein doppelter Eintrag erstellt, der möglicherweise nicht erwünscht ist.WHERE i.ip IS NULL
, was bedeutet, dass überhaupt keine Übereinstimmung vorliegt .A.) Der Befehl ist NICHT EXISTIERT, Sie vermissen das 'S'.
B.) Verwenden Sie stattdessen NOT IN
quelle
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 ;
Hier enthält die Tabelle testcases1 alle Daten und die Tabelle executions1 enthält einige Daten aus der Tabelle testcases1. Ich rufe nur die Daten ab, die in der Tabelle exections1 nicht vorhanden sind. (und selbst ich gebe einige Bedingungen an, die Sie auch angeben können.) Geben Sie an, dass die Bedingung, die beim Abrufen von Daten nicht vorhanden sein sollte, in Klammern stehen sollte.
quelle
Dies kann auch versucht werden ...
quelle
WHERE ip_location.ip is null
- Wie kann dieWHERE
Bedingung jemals wahr sein? Außerdem ist die Unterabfrage keine korrelierte.