我有 2 張桌子:
團體
------------ ------------
| id_group | id_user |
------------ ------------
| 1 | 1,2,3,4 |
用戶
------------ -----------
| id_user | name |
------------ -----------
| 1 | james |
| 2 | lars |
| 3 | kirk |
| 4 | robert |
我想使用這個查詢:
select id_group as id, (select name from user where id_user IN (id_user)) as name
from group
where id_group = 1
結果:
-------- -------------------------
| id | name |
-------- -------------------------
| 1 | james,lars,kirk,robert |
uj5u.com熱心網友回復:
IN 將不起作用,因為組中的 id_user 將作為文本處理,因此 FIND_IN_SET 可能更好但速度較慢
但是您應該緊急閱讀在資料庫列中存盤分隔串列真的那么糟糕嗎?
CREATE TABLE `group` ( `id_group` INTEGER, `id_user` VARCHAR(7) ); INSERT INTO `group` (`id_group`, `id_user`) VALUES ('1', '1,2,3,4');
CREATE TABLE user ( `id_user` INTEGER, `name` VARCHAR(6) ); INSERT INTO user (`id_user`, `name`) VALUES ('1', 'james'), ('2', 'lars'), ('3', 'kirk'), ('4', 'robert'), ('5', 'peter');
select id_group as id , (select GROUP_CONCAT(name ORDER BY id_user ASC) from user u where FIND_IN_SET(u.id_user, g.id_user)) as name from `group` g where id_group = 1
編號 | 姓名 -: | :--------- 1 | 詹姆斯、拉爾斯、柯克、羅伯特
db<>在這里擺弄
uj5u.com熱心網友回復:
嘗試這個:
SELECT
id_group AS id,
(SELECT GROUP_CONCAT(name) FROM user WHERE id_user IN (id_user)) AS name
FROM group
WHERE a.id_group = 1
要么
這假定字串中包含初始單引號和最終單引號。
SELECT
id_group AS id,
(SELECT
GROUP_CONCAT(name)
FROM user
WHERE id_user IN (REPLACE(id_user, ',', ''','''))
) AS name
FROM group
WHERE a.id_group = 1
如果沒有,您可以添加它們。
SELECT
id_group AS id,
(SELECT
GROUP_CONCAT(name)
FROM user
WHERE id_user IN ('''' REPLACE(id_user, ',', ''',''') '''')
) AS name
FROM group
WHERE id_group = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/447864.html
