Rumah >pangkalan data >tutorial mysql >Mengapa SQL Saya LEFT OUTER JOIN Mengembalikan Lebih Banyak Baris Daripada Jadual Kiri?

Mengapa SQL Saya LEFT OUTER JOIN Mengembalikan Lebih Banyak Baris Daripada Jadual Kiri?

Linda Hamilton
Linda Hamiltonasal
2025-01-25 01:17:09727semak imbas

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

Memahami SQL Kiri Luar Join: Mengapa lebih banyak baris daripada meja kiri?

Kesalahpahaman umum tentang

adalah bahawa ia sentiasa mengembalikan bilangan baris yang tepat dari meja kiri. Walaupun ia LEFT OUTER JOIN termasuk semua baris dari meja kiri, ia sebenarnya boleh menghasilkan lebih banyak baris jika terdapat pertandingan pendua di jadual yang betul.

mari kita menggambarkan ini dengan contoh:

Pertimbangkan pertanyaan ini:

<code class="language-sql">SELECT     
    SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM
    SUSP.Susp_Visits 
LEFT OUTER JOIN
    DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum</code>
Pertanyaan ini bertujuan untuk menyertai

(jadual kiri) dengan Susp_Visits (jadual kanan). Secara intuitif, seseorang mungkin mengharapkan maksimum 4935 baris (dengan mengandaikan bahawa kiraan Dim_Member). Walau bagaimanapun, hasil sebenar mungkin lebih besar. Susp_Visits

Sebabnya ialah

mencipta baris dalam hasil yang ditetapkan untuk LEFT OUTER JOIN setiap sepadan antara jadual kiri dan kanan. Jika satu baris dalam sepadan dengan pelbagai baris dalam Susp_Visits, ia akan diduplikasi dalam output, menghasilkan lebih banyak baris daripada yang dijangka pada awalnya. Dim_Member Oleh itu, kiraan baris yang lebih besar daripada yang dijangkakan selepas

menunjukkan bahawa sekurang-kurangnya satu baris di meja kiri mempunyai beberapa baris yang sepadan dalam jadual yang betul berdasarkan keadaan gabungan.

untuk menangani ini: LEFT OUTER JOIN

hanya memerlukan data jadual kiri?
    Cukup gunakan pernyataan
  • di meja kiri tanpa sebarang gabungan. SELECT Menghapuskan pendua?
  • Tambahkan klausa
  • ke pernyataan anda: ini akan menghapuskan baris pendua dari set hasil. DISTINCT SELECT SELECT DISTINCT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID ... Ini menjelaskan tingkah laku
  • dan menyediakan penyelesaian untuk pengendalian situasi di mana set keputusan melebihi bilangan baris di meja kiri.

Atas ialah kandungan terperinci Mengapa SQL Saya LEFT OUTER JOIN Mengembalikan Lebih Banyak Baris Daripada Jadual Kiri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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