【问题标题】:MariaDB : an INSERT...SELECT with empty VALUES tooMariaDB:一个 INSERT...SELECT 也有空值
【发布时间】:2019-10-14 22:50:17
【问题描述】:

我想从另一个不完整的表中插入数据,所以某些值必须在 NOT NULL 字段中为空。

例如,我有两个表:people 和 peopleTemp。

people 表中,我有很多字段:permit_numberfirst_namelast_name gendertel 等。在 peopleTemp 表中,我只有 permit_number first_namelast_name 和一个特殊字段 updated,在 UPDATE 查询之后设置。

现在我想插入他们在 people 中不存在的人。 Gendertel 不为空,但必须为空。我试试:

INSERT INTO people p1 (gender, tel, permit_number, first_name, last_name)
                VALUES ('','', (
                SELECT permit_number, first_name, last_name
                FROM peopleTemp p2
                WHERE p2.updated = 0))

但我收到此错误:SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)

你能帮我解决这个问题吗?提前谢谢你!

附加问题:我可以在查询结束时SET p2.updated = 1 吗?

【问题讨论】:

    标签: sql mariadb


    【解决方案1】:

    您可以使用insert . . . select 修复您的语法错误:

    INSERT INTO people p1 (gender, tel, permit_number, first_name, last_name)
        SELECT '', '', permit_number, first_name, last_name
        FROM peopleTemp p2
        WHERE p2.updated = 0;
    

    我建议您使用NULL 而不是空字符串来表示缺失值。

    【讨论】:

    • 谢谢!我同意NULL,但不幸的是数据库是这样制作的。
    【解决方案2】:

    对于您的其他问题.. 不,您不能。 SETUPDATE.. 一起使用。如果您想在完成INSERT 后更新p2.updated = 1,则必须在peopleTempJOIN 上运行额外的UPDATE 查询,并使用people 表进行验证。像下面这样的东西应该可以工作:

    ... after you done INSERT query suggested by Gordon
    
    UPDATE peopleTemp p2 
    JOIN   people p1
    ON     p2.permit_number=p1.permit_number 
    AND    p2.first_name=p1.first_name
    AND    p2.last_name=p1.last_name
    SET    p2.updated=1
    WHERE  P2.updated=0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-19
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2015-08-15
      • 2018-07-08
      相关资源
      最近更新 更多