SQL Pilih daripada jadual utama - jadual terperinci (data berformat)
P粉904191507
P粉904191507 2024-03-27 22:03:16
0
1
446

Saya mempunyai dua jadual bernama "Pembekal" dan "Kenalan".

Data dalam jadual kenalan sepadan dengan rekod dalam jadual pembekal.

Data pembekal

id Nama
1 Kuasa kuda
2 Huawei

Data hubungan

id ID Pembekal Hubungi
1 1 John
2 1 Smith
3 1 Akan
4 2 Jabatan Tenaga AS
5 2 Wick

Sekarang, saya ingin membuat pertanyaan yang sepatutnya mengembalikan hasil berikut

id Nama Hubungi
1 Kuasa kuda John, Smith, Will
2 Huawei Jabatan Tenaga A.S., Wake

Atau keputusan berikut harus dikembalikan

id Nama Hubungi Hubungi Hubungi
1 Kuasa kuda John Smith Akan
2 Huawei Jabatan Tenaga AS Wick

P粉904191507
P粉904191507

membalas semua(1)
P粉124890778

Anda boleh menggunakan MySQL GROUP_CONCAT 聚合函数来获取您的第一个输出表。它自己的 ORDER BY klausa akan membolehkan anda menyemak susunan penyambungan baris.

SELECT s.ID,
       s.Name,
       GROUP_CONCAT(c.Contact ORDER BY c.id)
FROM       Supplier s
INNER JOIN Contact c
        ON s.ID = c.supplierId
GROUP BY s.ID,
         s.Name

Anda boleh menggunakan fungsi tetingkap ROW_NUMBER 通过对供应商进行分区来为 Contact 表中的每一行分配排名。然后使用 IF 语句将联系人分成三列,该语句将检查排名的三个可能值。 MAX Fungsi pengagregatan akan membolehkan anda mengalih keluar nilai nol.

SELECT s.ID,
       s.Name,
       MAX(IF(c.rn = 1, c.Contact, NULL)) AS Contact1,
       MAX(IF(c.rn = 2, c.Contact, NULL)) AS Contact2,
       MAX(IF(c.rn = 3, c.Contact, NULL)) AS Contact3
FROM       Supplier s
INNER JOIN (SELECT *, ROW_NUMBER() OVER(PARTITION BY supplierId
                                        ORDER     BY id) AS rn
            FROM Contact ) c
        ON s.ID = c.supplierId
GROUP BY s.ID,
         s.Name;

Pertanyaan kedua mungkin tidak berfungsi jika terdapat lebih daripada tiga pelanggan bagi setiap pembekal. Dalam kes ini, anda boleh mengubah suai pertanyaan untuk memasukkan bilangan maksimum pembekal yang mungkin, atau menggunakan pernyataan yang disediakan. Jika anda benar-benar memerlukan penyelesaian sedemikian, sila tinggalkan komen di bawah.

Untuk pemahaman yang lebih baik, anda boleh menggunakan penyelesaian ini di sini. Penyelesaian pertama berfungsi dengan mana-mana versi MySQL, manakala penyelesaian kedua berfungsi dengan MySQL 8.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan