Penduaan berlaku apabila mysql menggunakan sambungan left join
Penerangan masalah
Apabila menggunakan pertanyaan join, contohnya, jadual A ialah yang utama jadual , sambungan kiri ke jadual B. Apa yang kami jangkakan ialah hasil pertanyaan akan mempunyai rekod sebanyak yang terdapat dalam jadual A. Walau bagaimanapun, mungkin terdapat keputusan bahawa jumlah rekod yang ditanya adalah lebih daripada jumlah rekod. dalam jadual A. , dan apabila hasil pertanyaan dipaparkan, beberapa lajur diulang secara ringkas, produk Cartesan dijana.
Contoh masalah
Jadual A ialah jadual pengguna (pengguna), dan medannya ialah:
ID pengguna nama ID
1 aaaa 10001
2 bbbb 10002
3 ccccc 10003
Jadual B ialah jenis jadual produk (produk) pertama dan medannya ialah:
ID pengguna masa tajuk ID
1 Tajuk 1 2014-01-01 10002
2 Tajuk 2 2014-01-01 10002
3 Tajuk 3 2014-01-01 10001
4 Tajuk 4 🎜>4 Tajuk 4 0-2018 >5 Tajuk 5 2018-03-20 10003
Pada masa ini, apabila kami menggunakan sql berikut untuk melaksanakan, kami mendapati bahawa hasil pelaksanaan
selecct * from user left join product on user.userid=product.userid;
Salin selepas log masuk
sebenarnya lebih tinggi daripada jumlah rekod dalam jadual pengguna Banyak
Masalah Selesai
Malah, masalah ini boleh dilihat oleh orang yang arif sepintas lalu, kerana kata kunci sertaan kiri tidak unik dalam jadual produk, jadi bahagian data bukan unik ini menghasilkan produk Cartesian , menghasilkan lebih banyak hasil pelaksanaan daripada yang dijangkakan.
Penyelesaian adalah dengan menggunakan kekunci unik untuk mengaitkan dan melakukan pertanyaan pautan
Apabila mysql menggunakan left join, data jadual kanan mempunyai data pendua
LEFT JOIN keyword akan Mengembalikan semua baris dari jadual kiri (nama_jadual1), walaupun tiada baris yang sepadan dalam jadual kanan (nama_jadual2). Pada masa ini, tiada masalah jika jadual yang betul (table_name2) tidak mempunyai data atau hanya satu keping data selepas ditapis oleh kata kunci on.
Apa yang saya ingin katakan ialah apa yang perlu dilakukan sekiranya terdapat data pendua (penduaan lengkap dalam perniagaan) dalam jadual yang betul (nama_jadual2).
Apabila data pendua muncul dalam jadual kanan (nama_jadual2) selepas ditapis oleh kata kunci on, data yang ditemui pada masa ini ialah: data jadual kanan * data pendua + data bersyarat lain dalam jadual kanan, dan apa yang kita perlukan Bilangan item data adalah berbeza.
Penyelesaian saya ialah dengan terlebih dahulu menanyakan jadual yang betul (nama_jadual2) mengikut kumpulan medan penapis, menapis data yang sama, dan kemudian menganggap hasilnya sebagai jadual yang sesuai untuk perkaitan
前面脑补
LEFT JOIN (SELECT MODEL_CODE,MODEL_NAME from tm_model GROUP BY MODEL_CODE) tm on tav.model_code = tm.MODEL_CODE
后面脑补
Salin selepas log masuk
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah pertindihan dalam mysql menggunakan sambungan sambungan kiri. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!