Đối với truy vấn GROUP_CONCAT của bạn; trong trường hợp của bạn stmt, bạn đang đề cập đến bảng sản phẩm của mình là product
chính nó. Nhưng trong truy vấn tham gia của bạn, bạn đang đề cập đến bảng sản phẩm dưới dạng bí danh p
. Vì truy vấn group_concat đầu tiên là một phần của truy vấn nối, bạn cần giữ nguyên bí danh của bảng. (Đã thực hiện các thay đổi ở dòng 5)
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'count(case when p.name = ''',
product.name,
''' then 1 end) AS ',
replace(product.name, ' ', '')
)
) INTO @pivotsql
from product;
SET @sql = CONCAT('SELECT omd.order_match_id, ', @pivotsql, ' from order_match_detail omd
left join order_match om
on omd.order_match_id = om.id
left join product p
on omd.product_id = p.id
where om.order_status_id in (4, 5, 6, 8)
group by omd.order_match_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;