Rumah > pangkalan data > tutorial mysql > Mengapa luar kiri saya menyertai lebih banyak baris daripada wujud di meja kiri?

Mengapa luar kiri saya menyertai lebih banyak baris daripada wujud di meja kiri?

Mary-Kate Olsen
Lepaskan: 2025-01-25 01:22:09
asal
1018 orang telah melayarinya

Why Does My LEFT OUTER JOIN Return More Rows Than Exist in the Left Table?

Left Outter Sertai tingkah laku yang tidak dijangka: lebih banyak baris daripada jadual kiri

Kesalahpahaman umum mengenai gabungan luar kiri adalah bahawa set hasil akan sentiasa mempunyai baris yang sama atau lebih sedikit daripada meja kiri. Walau bagaimanapun, ini tidak selalu benar. Bilangan baris boleh melebihi kiraan baris meja kiri di bawah keadaan tertentu.

Isu ini diperhatikan dalam pertanyaan menggunakan gabungan luar kiri antara "susp.susp_visits" (jadual kiri) dan "data.dim_member" (jadual kanan). Hasil gabungan mempunyai lebih banyak baris daripada 4935 baris dalam "susp.susp_visits".

Memahami Left Outter Joins

Fungsi Luar Kiri Join seperti berikut:

    Termasuk
  • semua baris dari meja kiri.
  • Untuk setiap baris meja kiri, ia mencari baris yang sepadan di jadual yang betul berdasarkan keadaan gabungan.
  • Jika perlawanan dijumpai, baris jadual kanan yang sepadan dimasukkan.
  • Jika tiada perlawanan dijumpai, nilai null dikembalikan untuk lajur meja yang betul.

Mengapa baris tambahan muncul

Baris tambahan tidak dicipta dengan menduplikasi baris meja kiri, melainkan oleh struktur meja yang betul. Masalahnya timbul apabila

berbilang baris dalam jadual yang betul ("data.dim_member") sepadan dengan tunggal baris di meja kiri ("susp.susp_visits"). Contohnya, jika "memid" dalam "susp.susp_visits" sepadan dengan pelbagai nilai "keahlian" dalam "data.dim_member", gabungan itu akan menghasilkan baris output berganda untuk baris jadual kiri tunggal, dengan itu meningkatkan baris keseluruhan kiraan.

Penyelesaian

untuk mengelakkan inflasi baris ini di luar kiri bergabung:

    Hadkan pemilihan:
  • Pilih hanya lajur dari jadual kiri. Ini menjamin kiraan baris output tidak akan melebihi kiraan baris meja kiri.
  • Gunakan Inner Join:
  • Jika anda hanya memerlukan baris di mana perlawanan wujud di antara kedua -dua jadual, gabungan dalaman lebih sesuai. Ini akan menghapuskan baris tambahan yang disebabkan oleh pelbagai perlawanan di sebelah kanan.

Atas ialah kandungan terperinci Mengapa luar kiri saya menyertai lebih banyak baris daripada wujud di meja kiri?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan