【问题标题】:INSERT INTO `tab1` SELECT `tab2` put empty values when `tab2` doesn't have recordsINSERT INTO `tab1` SELECT `tab2` 当 `t​​ab2` 没有记录时放置空值
【发布时间】:2013-11-13 02:32:20
【问题描述】:

我想创建一个 INSERT 查询,但就像在标题中一样 - 仅当 tab2 没有记录时。然后查询添加带有空值的 tab1 记录。我想改变它。当 tab2 没有记录时,查询不会向 tab1 添加记录。我该怎么做?

查询当前如下所示:

INSERT INTO `tab1` (SELECT `id`, `value`, `another_value` FROM `tab2`);

好吧,我再解释一下。

我有tab2,如果tab2.status=1,那么这些记录将被复制到tab1。但是如果tab2 没有任何记录,那么在tab1 中将添加记录,其中idid 之前的下一个值,其他值为0 或NULL。我想改一下,如果tab2没有记录,那么查询不会给tab1添加空记录。

我真正的疑问是:

INSERT INTO `troops_support` (SELECT NULL AS `id`, `from`, `fromType`, `to`, `toType`, GROUP_CONCAT(`army` SEPARATOR ":") FROM `army_actions` WHERE `type`=0 AND (`start`+`duration`)<=UNIX_TIMESTAMP());

【问题讨论】:

  • 什么意思?这是默认行为。如果tab2 为空,则此查询将向tab1 添加 条记录。
  • 亲爱的geomagas - 是的,这是我的问题。我只想添加非空值和查找方法,我该怎么做。
  • “当 tab2 没有记录时,则查询添加带有空值的 tab1 记录”:不,这不会发生在您的查询中 .除非我错过了什么。
  • 啊,没关系。造成这种行为的是GROUP_CONCAT()。无论 table2 有一百万行还是零行,您的所有行都聚合为 1 行。
  • @ypercube - GROUP BY 正在工作。非常感谢,写下答案然后我接受你的答案

标签: mysql sql select insert


【解决方案1】:

你可以试试这样的:

If SELECT COUNT(*) FROM table_2 > 0
BEGIN
INSERT INTO table_1
SELECT case when table_2_column_1 IS NOT NULL 
             THEN table_2_column_1
             else '' 
   END AS table_1_column1,
   case when table_2_column_2 IS NOT NULL 
             THEN table_2_column_2
             else '' 
   END AS table_1_column2
FROM table_2
END

【讨论】:

    【解决方案2】:

    你可以使用 IFNULL()

    INSERT INTO `tab1` (SELECT IFNULL(`id`,''), IFNULL(`value`,''), IFNULL(`another_value`,'') FROM `tab2`);
    

    【讨论】:

    • 它的工作方式与您的查询类似,但我不希望出现这种结果。
    • 也许你想为空白插入 NULL 而不是 ''
    猜你喜欢
    • 2015-02-01
    • 2020-06-03
    • 2012-01-23
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2019-03-14
    • 2023-02-09
    相关资源
    最近更新 更多