【发布时间】:2021-10-09 04:16:35
【问题描述】:
我有一个表,links,它将两个类别(父母和孩子)联系在一起。该表有五个字段:
- autoinc
- parent_category_name year(4) NOT NULL
- parent_category_year varchar(255) NOT NULL
- child_category_name year(4) NOT NULL
- child_category_year varchar(255) NOT NULL
我正在尝试编写一个 INSERT SELECT 来获取父子类别 ID,并将其插入到临时表中。
INSERT INTO temp (parent_category_id, child_category_id)
SELECT parent.parent_category_id, child.child_category_id
FROM links
JOIN categories AS parent
ON parent.name = link.parent_category_name
AND parent.year = link.parent_category_year
JOIN categories AS child
ON child.name = link.child_category_name
AND child.year = link.child_category_year
此查询运行良好,但我需要应用一些业务规则。规则是:
- 父年份必须与子年份相同
或
- 父年必须比子年少一年
我在查询中添加了 WHERE 子句:
WHERE link.child_category_year = link.parent_category_year
OR link.child_category_year - link.parent_category_year = 1
当这个 INSERT 语句在我的 Perl 代码中执行时,我得到以下异常:
DBI Exception: DBD::mysql::db do failed: BIGINT UNSIGNED value is out of range in '(`my_database`.`links`.`child_category_year` - `my_database`.`links`.`parent_category_year`)' [for Statement "
所以,我认为 INSERT 不喜欢 WHERE 子句中的日期减法。我探索了使用 DATEDIFF 函数,但我不是简单地寻找日期相差一年,而是父母比孩子少一年。
如何在没有插入错误的情况下完成此操作?
【问题讨论】:
-
这能回答你的问题吗? BIGINT UNSIGNED VALUE IS out of range My SQL