在可能为空的结果

时间:2017-03-23 17:10:14

标签: mysql select insert

我和我一样在同一条线上看过很多问题,但它们与我的问题并不完全相同。

这是我的疑问:

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;

修改

所以我想出如果我将select包装在另一个select中,它现在可以按预期工作了。不确定这是解决方案还是解决方法,但它确实让我的查询正常工作。

1 个答案:

答案 0 :(得分:0)

看起来你可能有一些产生错误的触发器 - 这是我能想到的唯一解释。