MySQL - UNION ALL 查询 - 未知列错误

标签 mysql sql

我有以下查询,它产生错误 #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

db-fiddle

问题出在查询的最后一个 INNER JOINS 中。你可以在这个db-fiddle中看到省略最后一个 UNION ALLSELECT 效果很好。解决方案可能很简单,但我看不到。

最佳答案

在最后一个查询中,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/

相关文章:

java - 当方法明显存在时出现NoSuchMethodError

php - mysql_fetch_array 只运行一次,应该是 6

MySql 脚本搜索所有非 ascii 并替换为空格

sql - 获取 SQL Server 中特定的 XML 子节点

php - 大整数乘积差分算法

java - 如何在 java 中将 UUID 保存为二进制 (16)

Mysql 创建或更新锁

mysql - 如何对汇总进行排序

sql - 如何更新配置单元表中的值?

c++ - SQLINTEGER 的 ODBC 错误