我有以下查询,它产生错误 #1054
Error: ER_BAD_FIELD_ERROR: Unknown column 'unit_name' in 'field list'"
SELECT CONCAT('program:', program_pk) AS global_id,
program_name AS name,
NULL AS parent_global_id
FROM program
UNION ALL
SELECT CONCAT('theme:', theme_pk) AS global_id,
theme_name AS name,
CONCAT('program:', program_fk) AS parent_global_id
FROM theme
UNION ALL
SELECT
CONCAT('theme:', theme_fk, ',strand:', strand_name) AS global_id,
strand_name AS name,
CONCAT('theme:', theme_fk) AS parent_global_id
FROM strand
UNION ALL
SELECT
CONCAT('theme:', theme_fk, ',strand:', strand_name, ',strandyear:', strandyear_name) AS global_id,
strandyear_name AS name,
CONCAT('theme:', theme_fk, ',strand:', strand_name) AS parent_global_id
FROM strandyear sy
INNER JOIN strand s ON s.strand_pk = sy.strand_fk
UNION ALL
SELECT
CONCAT('theme:', theme_fk, ',strand:', strand_name, ',strandyear:', strandyear_name, ',unit:', unit_name) AS global_id,
unit_name AS name,
CONCAT('theme:', theme_fk, ',strand:', strand_name, ',strandyear:', strandyear_name) AS parent_global_id
FROM unit u
INNER JOIN strandyear sy ON u.strandyear_fk = sy.strandyear_pk
INNER JOIN strand s ON s.strand_pk = sy.strand_fk
UNION ALL
SELECT
CONCAT('theme:', theme_fk, ',strand:', strand_name, ',strandyear:', strandyear_name, ',unit:', unit_name, ',rotation_discipline_block:', rotation_discipline_block_name) AS global_id,
rotation_discipline_block_name AS name,
CONCAT('theme:', theme_fk, ',strand:', strand_name, ',strandyear:', strandyear_name, ',unit:', unit_name) AS parent_global_id
FROM unit u
INNER JOIN rotation_discipline_block rdb ON u.unit_pk = rdb.unit_fk
INNER JOIN strandyear sy ON u.strandyear_fk = sy.strandyear_pk
INNER JOIN strand s ON s.strand_pk = sy.strand_fk
UNION ALL
SELECT
CONCAT('theme:', theme_fk, ',strand:', strand_name, ',strandyear:', strandyear_name, ',unit:', unit_name, ',rotation_discipline_block:', rotation_discipline_block_name, ',learning_event:', learning_event_name) AS global_id,
learning_event_name AS name,
CONCAT('theme:', theme_fk, ',strand:', strand_name, ',strandyear:', strandyear_name, ',unit:', unit_name, ',rotation_discipline_block:', rotation_discipline_block_name) AS parent_global_id
FROM learning_event le
INNER JOIN rotation_discipline_block rdb ON rdb.rotation_discipline_block_pk = le.rotation_discipline_block_fk
INNER JOIN rotation_discipline_block r ON u.unit_pk = r.unit_fk
INNER JOIN strandyear sy ON u.strandyear_fk = sy.strandyear_pk
INNER JOIN strand s ON s.strand_pk = sy.strand_fk
问题出在查询的最后一个 INNER JOINS
中。你可以在这个db-fiddle中看到省略最后一个 UNION ALL
和 SELECT
效果很好。解决方案可能很简单,但我看不到。
最佳答案
在最后一个查询中,union
表“rotation_discipline_block”出现了两次。
最后一个查询应该是这样的。
SELECT CONCAT('theme:',
theme_fk,
',strand:',
strand_name,
',strandyear:',
strandyear_name,
',unit:',
unit_name,
',rotation_discipline_block:',
rotation_discipline_block_name,
',learning_event:',
learning_event_name) AS global_id,
learning_event_name AS name,
CONCAT('theme:',
theme_fk,
',strand:',
strand_name,
',strandyear:',
strandyear_name,
',unit:',
unit_name,
',rotation_discipline_block:',
rotation_discipline_block_name) AS parent_global_id
FROM learning_event le
INNER JOIN rotation_discipline_block rdb
ON rdb.rotation_discipline_block_pk = le.rotation_discipline_block_fk
INNER JOIN Unit
ON u.unit_pk = rdb.unit_fk
INNER JOIN strandyear sy
ON u.strandyear_fk = sy.strandyear_pk
INNER JOIN strand s
ON s.strand_pk = sy.strand_fk
关于MySQL - UNION ALL 查询 - 未知列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56700068/