mariadb 也使用空VALUES的INSERT...SELECT

qyswt5oh  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(168)

我想从另一个不完整的表中插入数据,因此NOT NULL字段中的某些值必须为空。
例如,我有两个表:人员和人员临时
在***人***表中,我有很多字段:permit_numberfirst_namelast_namegendertel 等。在***peopleTemp***表中,我只有 permit_numberfirst_namelast_name 和一个特殊字段 updated,它们是在UPDATE查询后设置的。
现在我想插入一个人,他们不存在于***人**中。 性别 * 和 * 电话 * 不是空的,但必须为空。我尝试:

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吗?

qmelpv7a

qmelpv7a1#

您可以使用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而不是空字符串来表示缺少的值。

nzk0hqpo

nzk0hqpo2#

对于您的附加问题..不,您不能。SET可与UPDATE..一起使用。如果您要在完成INSERT后更新p2.updated = 1,则必须对peopleTempJOINpeople表运行附加的UPDATE查询以进行验证。类似以下内容应该有效:

... 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;

相关问题