Mam dwie tabele postgresql:
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
Chcę uzyskać każdy adres IP, z login_log
którego nie ma wiersza ip_location
.
Próbowałem tego zapytania, ale zgłasza błąd składni.
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`
Zastanawiam się również, czy to zapytanie (z dostosowaniami, aby działało) jest najlepiej działającym zapytaniem do tego celu.
LEFT JOIN
- jeśli w tabeli przeglądowej znajduje się wiele pasujących wierszy, spowoduje to utworzenie zduplikowanego wpisu w głównym zapytaniu dla każdego pasującego wiersza, co może nie być pożądane.WHERE i.ip IS NULL
, co oznacza brak dopasowania.A.) Polecenie NIE ISTNIEJE, brakuje litery „S”.
B.) Zamiast tego użyj NOT IN
źródło
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 ;
Tutaj tabela testcases1 zawiera wszystkie dane, a tabela wykonań1 zawiera niektóre dane z tabeli testcases1. Pobieram tylko dane, których nie ma w tabeli exections1. (a nawet podam pewne warunki w środku, które również możesz podać.) Określ warunek, którego nie ma podczas pobierania danych, powinien być umieszczony w nawiasach.
źródło
to też można spróbować ...
źródło
WHERE ip_location.ip is null
- jakWHERE
warunek może być kiedykolwiek prawdziwy? Ponadto zapytanie podrzędne nie jest skorelowane.