Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mendapatkan Baris Berasingan untuk Setiap Tiket dengan Penyelesaian Berkaitan Menggunakan GROUP_CONCAT dan LEFT JOIN dalam MySQL?

Bagaimana untuk Mendapatkan Baris Berasingan untuk Setiap Tiket dengan Penyelesaian Berkaitan Menggunakan GROUP_CONCAT dan LEFT JOIN dalam MySQL?

Susan Sarandon
Susan Sarandonasal
2024-10-26 10:05:29855semak imbas

How to Retrieve Separate Rows for Each Ticket with Associated Solutions Using GROUP_CONCAT and LEFT JOIN in MySQL?

MySQL: MENYERTAI GROUP_CONCAT dengan LEFT JOIN

Dalam MySQL, fungsi GROUP_CONCAT boleh digunakan bersama-sama dengan LEFT JOIN untuk mendapatkan data daripada berbilang jadual. Walau bagaimanapun, pengguna mungkin menghadapi masalah prestasi jika tidak digunakan dengan betul.

Pernyataan Masalah

Pertimbangkan pangkalan data meja bantuan dengan jadual untuk tiket (Tiket) dan penyelesaian (Penyelesaian). Pertanyaan ditulis untuk mendapatkan semula semua tiket dengan entri penyelesaian yang sepadan menggunakan pernyataan berikut:

<code class="sql">SELECT Tickets.*, GROUP_CONCAT(Solutions.solution) AS CombinedSolutions
FROM Tickets
LEFT JOIN Solutions ON Tickets.id = Solutions.ticket_id
ORDER BY Tickets.id;</code>

Pertanyaan ini mengembalikan satu baris dengan maklumat daripada tiket pertama dan semua penyelesaian daripada kedua-dua tiket. Ini tidak disengajakan, kerana kami menjangkakan baris yang berasingan untuk setiap tiket dengan penyelesaian yang berkaitan.

Penyelesaian

Untuk menangani isu ini, pertanyaan boleh diubah suai seperti berikut:

<code class="sql">SELECT t.*, x.combinedsolutions
FROM TICKETS t
LEFT JOIN (
    SELECT s.ticket_id, GROUP_CONCAT(s.solution) AS combinedsolutions
    FROM SOLUTIONS s
    GROUP BY s.ticket_id
) x ON x.ticket_id = t.ticket_id</code>

Dalam pertanyaan yang disemak ini, subkueri dalam klausa LEFT JOIN mendapatkan semula penyelesaian gabungan untuk setiap tiket menggunakan GROUP_CONCAT dalam kumpulan yang sesuai. Pertanyaan luar kemudiannya menggabungkan hasil ini dengan jadual Tiket utama menggunakan medan ticket_id.

Penyelesaian Ganti

Pendekatan alternatif ialah menggunakan pertanyaan bersarang innerhalb der Haupt-SELECT-Anweisung:

<code class="sql">SELECT t.*,
       (SELECT GROUP_CONCAT(s.soution)
        FROM SOLUTIONS s
        WHERE s.ticket_id = t.ticket_id) AS combinedsolutions
FROM TICKETS t</code>

Pendekatan ini melaksanakan tugas yang sama dengan membenamkan pertanyaan GROUP_CONCAT dalam penyataan SELECT luar.

Dengan menggunakan salah satu daripada pengubahsuaian ini, pertanyaan kini sepatutnya mendapatkan semula baris berasingan untuk setiap tiket dengan betul, setiap satu baris yang mengandungi maklumat tiket dan penyelesaian yang sepadan untuk tiket itu.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Baris Berasingan untuk Setiap Tiket dengan Penyelesaian Berkaitan Menggunakan GROUP_CONCAT dan LEFT JOIN 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