Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melakukan Gabungan Bersyarat dengan Nama Jadual Dinamik dalam MySQL?

Bagaimana untuk Melakukan Gabungan Bersyarat dengan Nama Jadual Dinamik dalam MySQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-05 08:17:08201semak imbas

How to Perform Conditional Joins with Dynamic Table Names in MySQL?

Gabung Bersyarat dengan Nama Jadual Dinamik dalam MySQL

Dalam MySQL, adalah mungkin untuk melaksanakan gabungan berdasarkan kriteria bersyarat, membolehkan anda menggabungkan data daripada jadual yang berbeza secara dinamik. Pertimbangkan senario berikut di mana anda mempunyai jadual yang mengandungi lajur 'jenis' dengan nilai terhitung mewakili nama jadual lain.

Matlamat anda adalah untuk melakukan gabungan dengan jadual tertentu berdasarkan nilai dalam 'jenis' lajur. Contohnya:

switch($type) {
  case 'table1':
    JOIN table1;
    break;
  case 'table2':
    JOIN table2;
    break;
}

Penyelesaian

Malangnya, MySQL tidak menyokong cantuman bersyarat secara langsung menggunakan sintaks suis case. Walau bagaimanapun, anda boleh mencapai kefungsian yang serupa menggunakan gabungan penyataan CASE dan LEFT JOIN. Pertanyaan berikut menunjukkan pendekatan ini:

SELECT
  t.id,
  t.type,
  t2.id AS id2,
  t3.id AS id3
FROM t
LEFT JOIN t2 ON t2.id = t.id AND t.type = 't2'
LEFT JOIN t3 ON t3.id = t.id AND t.type = 't3'

Dalam pertanyaan ini, pernyataan CASE digantikan dengan siri operasi LEFT JOIN. Klausa ON untuk setiap LEFT JOIN menentukan syarat cantuman berdasarkan nilai lajur 'jenis'.

Atas ialah kandungan terperinci Bagaimana untuk Melakukan Gabungan Bersyarat dengan Nama Jadual Dinamik dalam MySQL?. 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