Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya boleh menggabungkan nilai dengan cekap daripada berbilang baris ke dalam satu rentetan dalam SQLite menggunakan GROUP_CONCAT?

Bagaimanakah saya boleh menggabungkan nilai dengan cekap daripada berbilang baris ke dalam satu rentetan dalam SQLite menggunakan GROUP_CONCAT?

Susan Sarandon
Susan Sarandonasal
2024-11-04 18:57:011116semak imbas

How can I efficiently concatenate values from multiple rows into a single string in SQLite using GROUP_CONCAT?

Memahami GROUP_CONCAT dalam SQLite

Apabila berurusan dengan skema pangkalan data hubungan, selalunya perlu untuk menggabungkan nilai daripada berbilang baris jadual menjadi satu rentetan. Dalam SQLite, fungsi GROUP_CONCAT menyediakan penyelesaian yang berkuasa untuk tugas ini.

Data dan Objektif Anda

Pertimbangkan sampel data berikut, yang mewakili pengarang yang dikaitkan dengan abstrak:

1 A
1 B
1 C
1 D
2 E
2 F
3 G
3 H
3 I
3 J
3 K

Anda ingin menukar data ini kepada format yang setiap ID abstrak unik (_id) dikaitkan dengan senarai nama pengarang yang dipisahkan koma, seperti ini:

1 A,B,C,D
2 E,F

Menggunakan GROUP_CONCAT dengan Fungsi Agregat

Fungsi GROUP_CONCAT, digabungkan dengan fungsi agregat dan GROUP BY klausa, boleh mencapai matlamat ini. Pendekatan biasa ialah mencipta jadual perantaraan menggunakan subkueri, seperti yang anda cuba pada mulanya. Walau bagaimanapun, anda terlepas satu langkah penting.

Pendekatan yang Betul

Untuk menggunakan GROUP_CONCAT dengan betul, lakukan langkah berikut:

  1. Sertai Jadual: Gunakan klausa JOIN untuk mewujudkan hubungan antara jadual yang terlibat, memastikan bahawa baris dikumpulkan dengan betul untuk penggabungan.
  2. Gunakan Fungsi Agregat: Gunakan fungsi agregat (cth., GROUP_CONCAT) untuk menggabungkan nilai bagi kumpulan pendua yang dikenal pasti oleh klausa GROUP BY.
  3. KUMPULAN MENGIKUT Klausa: Sertakan klausa KUMPULAN OLEH selepas klausa FROM untuk menentukan lajur mana untuk mengumpulkan data.

Pertanyaan Dibetulkan

Berikut ialah pertanyaan yang diperbetulkan yang mengikut prinsip ini:

SELECT ABSTRACTS_ITEM._id, GROUP_CONCAT(ABSTRACT_AUTHOR.NAME) AS GroupedName
FROM ABSTRACTS_ITEM 
JOIN AUTHORS_ABSTRACT ON ABSTRACTS_ITEM._id = AUTHORS_ABSTRACT.ABSTRACTSITEM_ID
JOIN ABSTRACT_AUTHOR ON ABSTRACT_AUTHOR._id = AUTHORS_ABSTRACT.ABSTRACTAUTHOR_ID
GROUP BY ABSTRACTS_ITEM._id;

Alternatif Pertanyaan

Sebagai alternatif, anda boleh menggunakan pendekatan subkueri seperti yang anda cuba pada mulanya, tetapi dengan sintaks yang betul:

SELECT ID,
GROUP_CONCAT(NAME) 
FROM
    (select ABSTRACTS_ITEM._id AS ID,
     Name
     from
    ABSTRACTS_ITEM , ABSTRACT_AUTHOR , AUTHORS_ABSTRACT
    where
    ABSTRACTS_ITEM._id = AUTHORS_ABSTRACT.ABSTRACTSITEM_ID
    and
    ABSTRACT_AUTHOR._id = AUTHORS_ABSTRACT.ABSTRACTAUTHOR_ID)
GROUP BY ID;

Kedua-dua pertanyaan akan berjaya menggabungkan nama pengarang untuk setiap ID abstrak , menyediakan format output yang diingini.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menggabungkan nilai dengan cekap daripada berbilang baris ke dalam satu rentetan dalam SQLite menggunakan GROUP_CONCAT?. 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