我正在进行以下查询:
INSERT INTO a (id, value) VALUES (_id, (SELECT value FROM b WHERE b.id = _id));
表a:id,value(具有默认值)
表b:id,值
表b不包含所有请求的值。所以SELECT查询有时会返回0行。在这种情况下,它应该使用a.value的默认值。
这有可能吗?
修改
标记为已解决的帖子的评论中的空列解决方案。
答案 0 :(得分:3)
您可以将值包装在<?php if (($roman['best2'])==1){
coalesce(max(value), default_value)
答案 1 :(得分:0)
如果MySQL遵循其他RDBMS行为,则仅在您不指定字段时才会选择默认值。这意味着您需要两个不同的INSERT语句:
IF (EXISTS(SELECT * FROM b WHERE id = _id)) THEN
INSERT INTO a (id, value) SELECT _id, value FROM b WHERE id = _id;
ELSE
INSERT INTO a (id) SELECT _id;
END IF;
或者,可能是这样的......
INSERT INTO a (id, value) SELECT _id, value FROM b WHERE id = _id;
IF ((SELECT ROW_COUNT()) = 0) THEN
INSERT INTO a (id) SELECT _id;
END IF;
请注意,这是概念性的。我已经为你查找了语法,但我还没有在MySQL上测试它。
答案 2 :(得分:0)
以下查询可行。首先从表b中查找最大(值)的_id。它将为NULL或等于b.value。如果为NULL(使用COALESCE函数检查),则将表a的值列的默认值设置为值。
使用DEFAULT函数访问表a的值列的默认值(请参阅参考文献1)。
INSERT INTO a
SELECT
_id,
COALESCE(max(value), (SELECT DEFAULT(value) FROM a LIMIT 1)) value
FROM b
WHERE id = _id;
<强>参考强>: