Jadual Kandungan
Gunakan NOT IN
Menggunakan NOT EXISTS
Rumah pangkalan data tutorial mysql mysql pilih baris yang tidak ada dalam jadual lain

mysql pilih baris yang tidak ada dalam jadual lain

Jul 31, 2025 am 03:26 AM
mysql not in

Untuk memilih baris dari satu jadual yang tidak mempunyai rekod yang sepadan dalam jadual lain, MySQL menyediakan tiga kaedah biasa. 1. Gunakan gabungan kiri adalah NULL: Dengan menyertai jadual utama yang tersisa ke jadual sasaran dan penapisan rekod dengan jadual yang betul sebagai null, prestasi biasanya lebih baik dan logiknya jelas; 2. 3. Gunakan tidak wujud: Sama seperti gabungan kiri, tetapi lebih selamat dan menyokong pemadanan pelbagai syarat. Adalah disyorkan untuk digunakan dalam persekitaran pengeluaran. Apabila memilih, indeks, struktur data dan keperluan prestasi mesti dipertimbangkan secara komprehensif.

mysql pilih baris yang tidak ada dalam jadual lain

Kadang -kadang apabila kita memproses pangkalan data, kita akan menghadapi masalah berikut: Bagaimana untuk memilih baris dari satu jadual yang tidak mempunyai rekod yang sepadan dalam jadual lain? Ini sangat biasa dalam pembangunan sebenar, seperti mencari data yang tidak berkaitan, membersihkan maklumat berlebihan, dll.

mysql pilih baris yang tidak ada dalam jadual lain

MySQL menyediakan beberapa cara untuk mencapai keperluan ini. Di bawah ini saya akan memperkenalkan beberapa kaedah penulisan yang biasa digunakan dan menerangkan perbezaan dan senario yang terpakai di antara mereka.


Menggunakan LEFT JOIN IS NULL

Ini adalah kaedah yang paling biasa digunakan. Idea asas adalah untuk menyertai jadual utama yang tersisa ke meja sasaran, dan kemudian menapis rekod dengan jadual kanan NULL.

mysql pilih baris yang tidak ada dalam jadual lain
 Pilih A.*
Dari Table_A a
Kiri Join Table_b B di a.id = b.a_id
Di mana b.a_id adalah batal;

Ini membolehkan anda memilih data yang wujud dalam table_a tetapi tidak mencari perlawanan dalam table_b .

kelebihan:

mysql pilih baris yang tidak ada dalam jadual lain
  • Prestasi biasanya lebih baik, terutamanya apabila terdapat indeks
  • Logik yang jelas, mudah difahami dan diselenggarakan

Catatan:

  • Pastikan terdapat indeks di medan gabungan, jika tidak, pertanyaan mungkin melambatkan
  • Sekiranya terdapat banyak rekod yang sepadan di table_b , data table_a tidak akan dikembalikan berulang kali (kerana hanya satu yang diambil)

Gunakan NOT IN

Cara intuitif yang lain adalah menggunakan klausa NOT IN :

 Pilih *
Dari Table_a
Di mana id tidak masuk (pilih a_id dari table_b);

Kaedah ini kelihatan lebih dekat dengan makna ekspresi bahasa semulajadi.

Perkara yang perlu diperhatikan:

  • Sekiranya terdapat nilai NULL dalam hasil subquery, keseluruhan NOT IN akan tidak sah dan hasil kosong akan dikembalikan. Jadi sebelum menggunakannya, pastikan medan table_b tidak kosong atau tambahkan penapis:

     Di mana id tidak masuk (pilih a_id dari table_b di mana a_id tidak batal)

Senario yang terpakai:

  • Pertimbangkan apabila jumlah data tidak besar
  • Logik pertanyaan adalah mudah dan jelas, sesuai untuk pemula untuk difahami

Menggunakan NOT EXISTS

Cara lain untuk menulis adalah menggunakan NOT EXISTS :

 Pilih A.*
Dari Table_A a
Di mana tidak wujud (
    Pilih 1
    Dari table_b b
    Di mana b.a_id = a.id
);

Pendekatan ini sama dengan LEFT JOIN IS NULL , tetapi mungkin lebih efisien dalam beberapa kes, terutamanya apabila subquery mencecah indeks.

Kelebihan:

  • Lebih selamat, tidak terjejas oleh nilai NULL
  • Lebih banyak fleksibiliti dalam menambahkan pelbagai syarat

Cadangan Kecil:

  • Menggunakan SELECT 1 dalam subquery adalah teknik pengoptimuman yang bermaksud kita hanya peduli sama ada ia wujud dan tidak benar -benar menyemak kandungan medan.

Pada dasarnya ini adalah kaedah. Setiap kaedah penulisan mempunyai situasi aplikasi sendiri. Yang mana untuk dipilih bergantung kepada struktur data anda, keperluan prestasi dan tabiat peribadi. Seperti LEFT JOIN dan NOT EXISTS digunakan lebih kerap dalam kebanyakan persekitaran pengeluaran, sementara NOT IN lebih sesuai untuk menulis skrip atau ujian dengan cepat.

Apa yang tidak rumit tetapi mudah diabaikan ialah: Jangan lupa untuk memeriksa sama ada medan membenarkan NULL , dan sama ada indeks dibina, butiran ini akan menjejaskan hasil pertanyaan dan kelajuan.

Atas ialah kandungan terperinci mysql pilih baris yang tidak ada dalam jadual lain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Skop pembolehubah PHP dijelaskan
1 bulan yang lalu By 百草
Mengulas kod dalam php
1 bulan yang lalu By 百草
Petua untuk menulis komen php
1 bulan yang lalu By 百草

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1510
276
Menjamin MySQL dengan keistimewaan tahap objek Menjamin MySQL dengan keistimewaan tahap objek Jul 29, 2025 am 01:34 AM

Tosecuremysqleffectely, useObject-levelprivilygestestestigmilimitusAracCessBasedontheArtheirspecificNeeds.beginbyBySpelythatthatThatBje-levelprivileGeGsapplyTaDataBases, Tabel, orcolumns.

Amalan terbaik untuk menguruskan jadual mysql yang besar Amalan terbaik untuk menguruskan jadual mysql yang besar Aug 05, 2025 am 03:55 AM

Apabila berurusan dengan jadual besar, prestasi MySQL dan penyelenggaraan menghadapi cabaran, dan perlu bermula dari reka bentuk struktur, pengoptimuman indeks, strategi sub-meja jadual, dan sebagainya. 1. Gunakan indeks overlay untuk meningkatkan kecekapan pertanyaan; kerap menganalisis log pertanyaan perlahan dan memadam indeks tidak sah. 2. 3. Pertimbangkan pembacaan dan penulisan pemisahan dan pemisahan perpustakaan: Baca dan menulis pemisahan mengurangkan tekanan pada perpustakaan utama. Pemisahan perpustakaan dan pemisahan jadual sesuai untuk senario dengan sejumlah besar data. Adalah disyorkan untuk menggunakan middleware dan menilai masalah urus niaga dan masalah pertanyaan silang. Perancangan awal dan pengoptimuman berterusan adalah kunci.

Melaksanakan Penapis Replikasi Pangkalan Data MySQL Melaksanakan Penapis Replikasi Pangkalan Data MySQL Jul 28, 2025 am 02:36 AM

Penapisan replikasi MySQL boleh dikonfigurasi di perpustakaan utama atau perpustakaan hamba. Perpustakaan utama mengawal generasi binlog melalui binlog-do-db atau binlog-ignore-db, yang sesuai untuk mengurangkan jumlah log; Aplikasi data dikawal oleh replication-db-db, replication-ignore-db, replicate-do-table, replicate-ignore-table dan wildcard rules meniru-liar-do-table dan replication-liar-ignore-meja. Ia lebih fleksibel dan kondusif untuk pemulihan data. Semasa mengkonfigurasi, anda perlu memberi perhatian kepada perintah peraturan, tingkah laku penyataan silang,

Mengoptimumkan MySQL untuk Sistem Pengurusan Kandungan (CMS) Mengoptimumkan MySQL untuk Sistem Pengurusan Kandungan (CMS) Jul 28, 2025 am 03:19 AM

ToimprovemyMySffeForcMSplatformsLikewAwewewewordPress, firstimplemememememememememementerangkangkangkangkangkuNerGENGAgingPluginsLIKLIKLIKLIKeDIsdemeMemCached, enabheMySqlQueryCaching (ifipplicababable), andusePageCachingplugIsvestatiCatiCS

Bagaimana cara menyelesaikan kesilapan sambungan mysql biasa? Bagaimana cara menyelesaikan kesilapan sambungan mysql biasa? Aug 08, 2025 am 06:44 AM

Semak sama ada perkhidmatan MySQL sedang berjalan, gunakan sudosystemctlstatusmysql untuk mengesahkan dan memulakan; 2. Pastikan alamat pengikat ditetapkan kepada 0.0.0.0 untuk membolehkan sambungan jauh dan mulakan semula perkhidmatan; 3. Sahkan sama ada pelabuhan 3306 dibuka, periksa dan konfigurasikan peraturan firewall untuk membenarkan pelabuhan; 4. Untuk ralat "Accessdenied", anda perlu menyemak nama pengguna, kata laluan dan nama hos, dan kemudian log masuk ke MySQL dan menanyakan jadual MySQL.user untuk mengesahkan kebenaran. Jika perlu, buat atau kemas kini pengguna dan membenarkannya, seperti menggunakan 'your_user'@'%'; 5. Sekiranya pengesahan hilang kerana caching_sha2_password

Apakah perbezaan antara Truncate, Padam, dan Drop dalam MySQL? Apakah perbezaan antara Truncate, Padam, dan Drop dalam MySQL? Aug 05, 2025 am 09:39 AM

Deleteremovesspecificorallrows, keepstableStructure, membolehkan rollrackandtriggers, anddoesnotresetauto-increment; 2.truncatequicklyremovesallrows, resetsauto-increment, tidak boleh dibebaskan

Bagaimana cara menggunakan kekangan cek untuk menguatkuasakan peraturan data di MySQL? Bagaimana cara menggunakan kekangan cek untuk menguatkuasakan peraturan data di MySQL? Aug 06, 2025 pm 04:49 PM

MySQL menyokong kekangan cek untuk memaksa integriti domain, berkesan dari versi 8.0.16; 1. Tambah kekangan apabila membuat jadual: Gunakan createtable untuk menentukan syarat semak, seperti umur ≥18, gaji> 0, nilai had jabatan; 2. Ubah suai jadual untuk menambah kekangan: Gunakan altertableaddConstraint untuk mengehadkan nilai medan, seperti nama tidak kosong; 3. Menggunakan syarat-syarat yang kompleks: menyokong logik dan ekspresi multi-lajur, seperti tarikh akhir ≥ multart status dan status siap mesti mempunyai tarikh akhir; 4. Padam Kekangan: Gunakan alterTableDRopConstraint untuk menentukan nama untuk memadam; 5. Nota: Mysql8.0.16, InnoDB atau Myisam perlu disebutkan

Melaksanakan Penjejakan Lineage Data MySQL Melaksanakan Penjejakan Lineage Data MySQL Aug 02, 2025 pm 12:37 PM

Kaedah teras untuk merealisasikan pengesan hubungan darah MySQL termasuk: 1. Gunakan binlog untuk merakam sumber perubahan data, membolehkan dan menganalisis binlog, dan mengesan tindakan perniagaan tertentu dalam kombinasi dengan konteks lapisan aplikasi; 2. Suntikan tag ikatan darah ke dalam proses ETL, dan merekodkan hubungan pemetaan antara sumber dan sasaran apabila menyegerakkan alat; 3. Tambah komen dan tag metadata ke data, terangkan sumber medan apabila membina jadual, dan sambungkan ke sistem pengurusan metadata untuk membentuk peta visual; 4. Perhatikan konsistensi utama utama, elakkan kebergantungan yang berlebihan pada analisis SQL, perubahan model data kawalan versi, dan kerap memeriksa data hubungan darah untuk memastikan penjejakan hubungan darah yang tepat dan boleh dipercayai.

See all articles