Mysql When 语句错误1054

标签 mysql database database-migration

将 list 迁移到新架构。旧模式有一张表,而新模式有两张表和一个链接 Assets 类型的外键。问题出在外键部分。我似乎无法将外键发布到 Assets 表上。我基本上已经弄清楚了逻辑,但我遇到了一个问题,即迁移在应该存在的列上遇到了 1054 错误。 部分抛出错误是“SELECT CASE WHEN (asset.category”位。

ALTER TABLE `foreignkeytest`.`asset` 
    ADD COLUMN `category` VARCHAR(255) NULL AFTER `parent_asset_id_asset_id`,
    ADD COLUMN `subcategory` VARCHAR(255) NULL AFTER `category`,
    ADD COLUMN `brand` VARCHAR(255) NULL AFTER `subcategory`,
    ADD COLUMN `model` VARCHAR(255) NULL AFTER `brand`;
ALTER TABLE `foreignkeytest`.`asset_type`;
ALTER TABLE `inventory`.`inv`;
INSERT IGNORE INTO `foreignkeytest`.`asset` 
    (asset_id, category, subcategory, location, serial_number, brand, model, purchase_date, glacct, barcode_attached) 
    SELECT id, category, subcategory, location, serialnumber, brand, itemtype, from_unixtime(purchasedate), glacct, barcode 
    FROM `inventory`.`inv`;
INSERT IGNORE INTO `foreignkeytest`.`asset_type` (category, subcategory, brand, model) 
    SELECT category, subcategory, brand, itemtype FROM `inventory`.`inv`;
INSERT INTO `foreignkeytest`.`asset` (asset_type_id)
    SELECT
        CASE
            WHEN (`asset`.`category` = `asset_type`.`category` AND
                `asset`.`subcategory` = `asset_type`.`subcategory` AND
                `asset`.`brand` = `asset_type`.`brand` AND
                `asset`.`model` = `asset_type`.`brand`) THEN 1
            ELSE 0
        END
    type_id FROM `foreignkeytest`.`asset_type`;
ALTER TABLE `foreignkeytest`.`asset` DROP COLUMN `category`, DROP COLUMN `subcategory`, DROP COLUMN `brand`, DROP COLUMN `model`;

为什么这不起作用?

编辑:此问题的修复是我没有为选择引用 asset 表。倒数第二行更改为:

type_id FROM `foreignkeytest`.`asset_type`, `foreignkeytest`.`asset`;

最佳答案

你指的是 Assets 表,但你是从外键测试中选择的
所以案例列是错误的尝试从 Assets 中选择

    INSERT INTO `foreignkeytest`.`asset` (asset_type_id)
    SELECT
        CASE
            WHEN (`asset`.`category` = `asset_type`.`category` AND
                `asset`.`subcategory` = `asset_type`.`subcategory` AND
                `asset`.`brand` = `asset_type`.`brand` AND
                `asset`.`model` = `asset_type`.`brand`) THEN 1
            ELSE 0
        END
    type_id FROM `asset`.`asset_type`;

关于Mysql When 语句错误1054,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45763274/

相关文章:

php - 连接被拒绝 SQL : select * from information_schema. 表,其中 table_schema = firstdb 和 table_name = migrations 和 table_type = 'BASE TABLE

mysql - 将 MySQL 与 NewSQL 一起使用?

php - 当我使用 exec() 时如何从 mysqldump 获取返回?

php - 我应该创建另一个表列还是有其他方法可以做到这一点?

java - FlyWay迁移策略

php - 完全重置 Laravel 5 迁移内容?

java - sql语法错误 MySQLSyntaxErrorException

mysql - WordPress:如何从自定义分类查询中排除子分类中的帖子?

PHP 脚本:警告:mysqli::mysqli(): (HY000/2002): 中没有这样的文件或目录

mysql - mysql内连接不明确