Rumah > Soal Jawab > teks badan
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粉1248907782024-03-28 09:13:08
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.