Saya punya dua tabel postgresql:
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
Saya ingin mendapatkan setiap alamat IP login_log
yang tidak memiliki baris ip_location
.
Saya mencoba kueri ini tetapi ada kesalahan sintaksis.
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`
Saya juga ingin tahu apakah kueri ini (dengan penyesuaian agar berfungsi) adalah kueri yang berkinerja terbaik untuk tujuan ini.
LEFT JOIN
- jika ada beberapa baris yang cocok di tabel pencarian, ini akan membuat entri duplikat dalam permintaan utama Anda untuk setiap baris yang cocok, yang mungkin tidak diinginkan.WHERE i.ip IS NULL
, artinya tidak cocok sama sekali.A.) Perintah BUKAN ADA, Anda kehilangan 'S'.
B.) Gunakan NOT IN sebagai gantinya
sumber
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 ;
Di sini tabel testcases1 berisi semua data dan tabel execututions1 berisi beberapa data di antara tabel testcases1. Saya hanya mengambil data yang tidak ada dalam tabel exections1. (dan bahkan saya memberikan beberapa kondisi di dalam yang juga dapat Anda berikan.) tentukan kondisi yang seharusnya tidak ada dalam pengambilan data harus di dalam kurung.
sumber
ini juga bisa dicoba ...
sumber
WHERE ip_location.ip is null
- bagaimanaWHERE
kondisinya menjadi benar? Juga, sub-kueri bukan yang berkorelasi.