【发布时间】:2020-05-29 03:47:05
【问题描述】:
我有一个字符串列表。它们中的每一个都有由“/”分隔的类别。
例如:
动物/家养/狗
动物/家养/猫
我想要对这些类别做的是插入到 MySql 类别表中。 该表有 4 列: id (int auto increment), category_name (nvarchar), parent_id (int), is_active (bit)
插入这些的逻辑应该如下:
主要类别(动物)的 parent_id 应为 0。
子类别的父类别的 id 为 parent_id。
不能有两个具有相同类别名称的活动类别。
我已经尝试实现以下逻辑:
获取不同的字符串列表。
从中获取主要类别的不同列表。
将不同的主要类别插入到父 ID 为 0 的类别表中。
成对组织每个类别并获得不同的对:
(动物,家养)
(家养,狗)
(国内,猫)
- 获取每个父类别的匹配 id 并插入到孩子的 parent_id 中
SQL:
/*INSERT ALL THE FIRST PARENT CATEGORIES WITH A PARENT ID OF 0*/
INSERT INTO categories (category_name, parent_id, is_active)
VALUES ('animals', 0, 1);
/*INSERT ALL THE CATEGORIES IN PAIRS TO TEMP TABLE*/
CREATE TEMPORARY TABLE tempcat(parent nvarchar(256), child nvarchar(256));
INSERT INTO tempcat
VALUES ('animals', 'domestic'),('domestic', 'dog'),('domestic','cat');
/*INSERT INTO THE CATEGORIES TABLE*/
INSERT INTO categories(category_name, parent_id, is_active)
SELECT tempcat.child, categories.id, 1
FROM categories
INNER JOIN tempcat
ON categories.category_name = tempcat.parent;
WHERE categories.is_active = 1;
/*DISPOSE THE TEMPORARY TABLE*/
DROP TEMPORARY TABLE tempcat;
问题: 运行查询后,我预计类别表中有 4 个条目。
但我只得到 2 个。
在进行最后一次内部连接之前,我可以看到临时表具有正确的条目。 我似乎无法弄清楚为什么类别表没有其他两行。
高度赞赏任何正确方向的指导。
更新 #1 假设规范说“不能有两个具有相同类别名称的活动类别具有相同的父 ID”。 例如,如果有两个字符串,即 (animals/domestic/cat)、(animals/outdoor/cat),则应该有两个 cat 条目,其父 ID 为 home 和outer。
【问题讨论】:
-
你用的是什么版本的 MySQL?
-
@GordonLinoff 它是'5.6.46-log'
标签: mysql sql insert inner-join temp-tables