SQL GROUP_CONCAT 在子查询中没有给出想要的数据
SQL GROUP_CONCAT in subquery does not give the desired data
我正在尝试 select 使用子查询获取数据。
如果我 运行 没有其他东西的子查询按预期工作,
否则它 return 仅来自 1 行而不是 4 的数据。
SELECT t.IDS,
(
SELECT GROUP_CONCAT(_t.DATA SEPARATOR ';')
FROM table _t
WHERE _t.ID IN (t.IDS)
) as DATA
FROM (
SELECT '1,2,3,4' as IDS
) t;
Table:
ID
DATA
1
Test
2
Test1
3
Test2
4
Test3
查询应该return这样:
IDS: '1,2,3,4'
数据:'Test;Test1;Test2;Test3'
目前return是这样的:
IDS: '1,2,3,4'
数据:'Test'
上面的查询只是一个例子。
你的tablet是一个字符串所以IN
不行,你可以用FIND_IN_SET
代替,但是性能不好
CREATE TABLE tab1 (
`ID` INTEGER,
`DATA` VARCHAR(5)
);
INSERT INTO tab1
(`ID`, `DATA`)
VALUES
('1', 'Test'),
('2', 'Test1'),
('3', 'Test2'),
('4', 'Test3');
SELECT t.IDS,
(
SELECT GROUP_CONCAT(_t.DATA ORDER BY _t.ID SEPARATOR ';')
FROM tab1 _t
WHERE FIND_IN_SET(_t.ID,t.IDS)
) as DATA
FROM (
SELECT '1,2,3,4' as IDS
) t;
IDS | DATA
:------ | :---------------------
1,2,3,4 | Test;Test1;Test2;Test3
db<>fiddle here
我正在尝试 select 使用子查询获取数据。 如果我 运行 没有其他东西的子查询按预期工作, 否则它 return 仅来自 1 行而不是 4 的数据。
SELECT t.IDS,
(
SELECT GROUP_CONCAT(_t.DATA SEPARATOR ';')
FROM table _t
WHERE _t.ID IN (t.IDS)
) as DATA
FROM (
SELECT '1,2,3,4' as IDS
) t;
Table:
ID | DATA |
---|---|
1 | Test |
2 | Test1 |
3 | Test2 |
4 | Test3 |
查询应该return这样: IDS: '1,2,3,4' 数据:'Test;Test1;Test2;Test3'
目前return是这样的: IDS: '1,2,3,4' 数据:'Test'
上面的查询只是一个例子。
你的tablet是一个字符串所以IN
不行,你可以用FIND_IN_SET
代替,但是性能不好
CREATE TABLE tab1 ( `ID` INTEGER, `DATA` VARCHAR(5) ); INSERT INTO tab1 (`ID`, `DATA`) VALUES ('1', 'Test'), ('2', 'Test1'), ('3', 'Test2'), ('4', 'Test3');
SELECT t.IDS, ( SELECT GROUP_CONCAT(_t.DATA ORDER BY _t.ID SEPARATOR ';') FROM tab1 _t WHERE FIND_IN_SET(_t.ID,t.IDS) ) as DATA FROM ( SELECT '1,2,3,4' as IDS ) t;
IDS | DATA :------ | :--------------------- 1,2,3,4 | Test;Test1;Test2;Test3
db<>fiddle here