MySQL INSERT INTO ... SELECT或默认值

时间:2014-05-20 15:09:45

标签: mysql sql select insert

我正在进行以下查询:

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的默认值。

这有可能吗?

修改

标记为已解决的帖子的评论中的空列解决方案。

3 个答案:

答案 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;

SQL Fiddle demo

<强>参考

  1. How to SELECT DEFAULT value of a field on SO