我遇到了与group_concat相关的问题,因为当我使用它时,总记录无法从基于transactionID的表中获取 这是我的存储过程代码。在这里我使用了一个名为strSplit的分割函数。
BEGIN
DECLARE iCount int;
DECLARE i int;
DECLARE txn VARCHAR(65000);
DECLARE txId VARCHAR(17);
CREATE TEMPORARY TABLE report_transaction (client_id INT NOT NULL AUTO_INCREMENT, productName VARCHAR(200), itxnId VARCHAR(100),PRIMARY KEY(client_id));
select count(distinct(tt.TxnId)) into iCount from tbl_transaction tt;
SELECT group_concat(distinct((tt.TxnId)) separator ', ') product into txn from tbl_transaction tt;
SET i=1;
WHILE i<iCount+1 DO
select strSplit(txn, ',', i) into txId;
SELECT RTRIM(LTRIM(txId));
INSERT INTO report_transaction(productName,itxnId) select group_concat((tt.ProductName) separator ',') products,tt.TxnId from tbl_transaction tt where tt.TxnId= txId;
SET i = i + 1;
END WHILE;
SELECT * FROM report_transaction;
drop table report_transaction;
END
我希望结果像表记录,但它只显示第一条记录,然后其他字段为空。
答案 0 :(得分:0)
我认为您想要的只需一个查询即可:
INSERT INTO report_transaction(productName,itxnId)
select group_concat((tt.ProductName) separator ',') as products, tt.TxnId
from tbl_transaction tt
group by tt.TxnId;
您不需要临时表来存储ID,也不需要修剪或拆分任何内容。
通常,在适当的时候使用SQL查询可以获得更好的性能。
顺便说一句,如果你确实需要遍历表中的行,那么你应该学习游标。