【发布时间】:2022-01-29 06:52:59
【问题描述】:
SELECT productspec_crud.id as id,clause_no FROM design_models
INNER JOIN productspec_crud ON productspec_crud.prod_id=design_models.prod_id
WHERE design_models.id = '13'
union all
select design_input_general.id,clause_no from design_input_general
left join design_io on design_io.model_id='13' and design_io.design_input_general_id=design_input_general.id
从上面的工作代码中,我试图在两个选择查询中包含一些代码来根据clause_no 值对行进行排序。以下是我要包含的代码:
JOIN (SELECT 1 num UNION SELECT 2 UNION SELECT 3
UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) numbers
ON LENGTH(clause_no) - LENGTH(REPLACE(clause_no, '.', '')) >= num - 1
GROUP BY id, clause_no
ORDER BY GROUP_CONCAT(CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(clause_no, '.', num), '.', -1) REGEXP '[^0-9]'
THEN RPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(clause_no, '.', num), '.', -1), 8, 0)
ELSE LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(clause_no, '.', num), '.', -1), 8, 0)
END ORDER BY num SEPARATOR '');
我已经以这种方式包含了上面的代码:
(SELECT
productspec_crud.id as id,clause_no FROM `design_models`
INNER JOIN `productspec_crud` ON `productspec_crud`.`prod_id`=`design_models`.`prod_id`
JOIN (SELECT 1 num UNION SELECT 2 UNION SELECT 3
UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) numbers
ON LENGTH(clause_no) - LENGTH(REPLACE(clause_no, '.', '')) >= num - 1)
union all
(select design_input_general.id,clause_no from `design_input_general`
left join design_io on design_io.model_id='13' and design_io.design_input_general_id=design_input_general.id
JOIN (SELECT 1 num UNION SELECT 2 UNION SELECT 3
UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) numbers
ON LENGTH(clause_no) - LENGTH(REPLACE(clause_no, '.', '')) >= num - 1))
GROUP BY id, clause_no
ORDER BY GROUP_CONCAT(CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(clause_no, '.', num), '.', -1) REGEXP '[^0-9]'
THEN RPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(clause_no, '.', num), '.', -1), 8, 0)
ELSE LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(clause_no, '.', num), '.', -1), 8, 0)
END ORDER BY num SEPARATOR '');
当我包含这个时,我收到以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'GROUP BY `id`, `clause_no` ORDER BY GROUP_CONCAT(CASE WHEN SUBSTRING_INDEX(SU...'
谁能建议正确的语法将其包含在 union all 运算符中。
【问题讨论】: