Jawaban:
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
T : Apa yang terjadi di sini?
A : Secara konseptual, kami memilih semua baris dari table1
dan untuk setiap baris kami berusaha menemukan baris table2
dengan nilai yang sama untuk name
kolom. Jika tidak ada baris seperti itu, kami hanya membiarkan table2
bagian dari hasil kami kosong untuk baris itu. Kemudian kami membatasi pilihan kami dengan memilih hanya baris-baris di hasil di mana baris yang cocok tidak ada. Akhirnya, Kami mengabaikan semua bidang dari hasil kami kecuali untuk name
kolom (yang kami yakin ada, dari table1
).
Meskipun ini mungkin bukan metode yang paling mungkin dilakukan dalam semua kasus, itu harus bekerja pada dasarnya setiap mesin basis data yang pernah mencoba untuk mengimplementasikan ANSI 92 SQL
Anda bisa melakukannya
SELECT name
FROM table2
WHERE name NOT IN
(SELECT name
FROM table1)
atau
SELECT name
FROM table2
WHERE NOT EXISTS
(SELECT *
FROM table1
WHERE table1.name = table2.name)
Lihat pertanyaan ini untuk 3 teknik untuk mencapai ini
Saya tidak punya cukup poin rep untuk memilih jawaban ke-2. Tetapi saya harus tidak setuju dengan komentar di atas. Jawaban kedua:
SELECT name
FROM table2
WHERE name NOT IN
(SELECT name
FROM table1)
Apakah JAUH lebih efisien dalam praktik. Saya tidak tahu mengapa, tapi saya menjalankannya melawan 800k + catatan dan perbedaannya luar biasa dengan keuntungan yang diberikan pada jawaban ke-2 yang diposting di atas. Hanya $ 0,02 saya
Ini adalah teori himpunan murni yang dapat Anda capai dengan minus
operasi.
select id, name from table1
minus
select id, name from table2
SELECT <column_list>
FROM TABLEA a
LEFTJOIN TABLEB b
ON a.Key = b.Key
WHERE b.Key IS NULL;
https://www.cloudways.com/blog/how-to-join-two-tables-mysql/
Hati-hati terhadap jebakan. Jika bidang Name
di dalam Table1
berisi Nulls Anda berada dalam kejutan. Lebih baik adalah:
SELECT name
FROM table2
WHERE name NOT IN
(SELECT ISNULL(name ,'')
FROM table1)
Inilah yang paling cocok untuk saya.
SELECT *
FROM @T1
EXCEPT
SELECT a.*
FROM @T1 a
JOIN @T2 b ON a.ID = b.ID
Ini lebih dari dua kali lebih cepat daripada metode lain yang saya coba.
Anda dapat menggunakan EXCEPT
mssql atau MINUS
oracle, mereka identik menurut:
Itu berhasil bagi saya
SELECT *
FROM [dbo].[table1] t1
LEFT JOIN [dbo].[table2] t2 ON t1.[t1_ID] = t2.[t2_ID]
WHERE t2.[t2_ID] IS NULL
Saya akan memposting ulang (karena saya belum cukup keren untuk berkomentar) dalam jawaban yang benar .... kalau-kalau ada orang yang berpikir perlu menjelaskan lebih baik.
SELECT temp_table_1.name
FROM original_table_1 temp_table_1
LEFT JOIN original_table_2 temp_table_2 ON temp_table_2.name = temp_table_1.name
WHERE temp_table_2.name IS NULL
Dan saya telah melihat sintaks dalam FROM yang membutuhkan koma di antara nama tabel di mySQL tetapi dalam sqlLite sepertinya lebih menyukai spasi.
Intinya adalah ketika Anda menggunakan nama-nama variabel buruk itu meninggalkan pertanyaan. Variabel saya harus lebih masuk akal. Dan seseorang harus menjelaskan mengapa kita membutuhkan koma atau tidak koma.
Jika Anda ingin memilih pengguna tertentu
SELECT tent_nmr FROM Statio_Tentative_Mstr
WHERE tent_npk = '90009'
AND
tent_nmr NOT IN (SELECT permintaan_tent FROM Statio_Permintaan_Mstr)
Ini tent_npk
adalah kunci utama pengguna