【发布时间】:2017-03-23 17:10:14
【问题描述】:
我已经看到很多与我类似的问题,但它们与我的问题并不完全相同。
这是我的查询:
insert into`quotes`(`QuoteID`,`QuoteRequestID`,`Number`,`UserID`,`Viewed`,
`_Latest`)
select uuid(),uuid(),
ifnull(max(`quotes`.`Number`),0)+1,'Some User ID',1,1
from`quotes`
join`quoterequests`using(`QuoteRequestID`)
where`quoterequests`.`UserID`='Some User Other ID';
这是我得到的错误:
错误代码:1048。列 'QuoteID' 不能为空
所以我的猜测是 select 语句没有返回任何内容,但既然我在查询中使用了max(),那怎么可能呢?
果然,如果我删除了insert 部分并自己运行 select 语句,那么我确实得到了预期的结果,以及新的 UUID(绝对不是空值)等等。这里发生了什么?这是 MySQL 的错误吗?我的 MySQL 版本是 5.7.14;
编辑
所以我已经弄清楚如果我将选择包装在另一个选择中,它现在可以按预期工作。不确定这是解决方案还是解决方法,但它确实让我的查询正常工作。
【问题讨论】:
-
您的查询在 uuid() 函数中返回空值的行...检查 uuid() 函数
-
@scaisEdge uuid() 函数绝对不会返回 null,它是一个返回唯一标识符的内置函数。另外,我在帖子正文中指定我检查了没有插入的 select 语句的输出,我得到了我正在寻找的结果