gpt4 book ai didi

mysql - 如何在 MySQL 的时态表中插入默认值?

转载 作者:行者123 更新时间:2023-11-29 13:39:43 25 4
gpt4 key购买 nike

我想通过 MySQL 中的 SELECT 语句创建临时表。它涉及多个 JOIN,并且可以产生 NULL 值,我希望 MySQL 将其视为零。这听起来像是一个简单的问题(简单地默认为零),但 MySQL(5.6.12)无法引出默认值。

例如,采用以下两个表:

mysql> select * from TEST1;
+------+------+
| a | b |
+------+------+
| 1 | 2 |
| 4 | 25 |
+------+------+
2 rows in set (0.00 sec)

mysql> select * from TEST2;
+------+------+
| b | c |
+------+------+
| 2 | 100 |
| 3 | 100 |
+------+------+
2 rows in set (0.00 sec)

左连接给出:

mysql> select TEST1.*,c from TEST1 left join TEST2 on TEST1.b=TEST2.b;
+------+------+------+
| a | b | c |
+------+------+------+
| 1 | 2 | 100 |
| 4 | 25 | NULL |
+------+------+------+
2 rows in set (0.00 sec)

现在,如果我想将这些值保存在临时表中(将 NULL 更改为零),我将使用以下代码:

mysql> create temporary table TEST_JOIN (a int, b int, c int default 0 not null)
select TEST1.*,c from TEST1 left join TEST2 on TEST1.b=TEST2.b;
ERROR 1048 (23000): Column 'c' cannot be null

我做错了什么?最糟糕的是,在我进行系统范围的升级之前,这段代码曾经可以工作(我不记得我有哪个版本的 MySQL,但它肯定低于我当前的 5.6)。它曾经产生我期望的行为:如果它是 NULL,则使用默认值,而不是我现在遇到的令人沮丧的错误。

来自 5.6 的文档(自 4.1 以来未更改):

Inserting NULL into a column that has been declared NOT NULL. For multiple-row INSERT statements or INSERT INTO ... SELECT statements, the column is set to the implicit default value for the column data type. This is 0 for numeric types, the empty string ('') for string types, and the “zero” value for date and time types. INSERT INTO ... SELECT statements are handled the same way as multiple-row inserts because the server does not examine the result set from the SELECT to see whether it returns a single row. (For a single-row INSERT, no warning occurs when NULL is inserted into a NOT NULL column. Instead, the statement fails with an error.)

我当前的解决方法是将 NULL 值存储在时态表中,然后用零替换它们,但对于很多列来说这似乎相当麻烦(而且效率非常低)。有更好的方法吗?

顺便说一句,我不能简单地忽略查询中的某些列( as suggested for another question ),因为它是一个多行查询。

最佳答案

IFNULL(`my_column`,0);

这会将 NULL 设置为 0。其他值保持原样。

只需用 IFNULL 包装您的值/列名称,它就会将它们转换为您放入函数中的任何默认值。例如。 0. 或“欧洲燕子”,或任何你想要的。

然后您可以保持严格模式开启并仍然优雅地处理 NULL。

关于mysql - 如何在 MySQL 的时态表中插入默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18242113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com