将 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/