【问题标题】:How to INSERT INTO table WHERE one of the values taken from selection如何在表中插入从选择中获取的值之一
【发布时间】:2017-02-15 20:07:49
【问题描述】:

我有三张桌子:

用户组user 其中包含 usergroupid 外部密钥 — subscribeforum 带有 subscribeforumid (auto incr)、userid、forumid、emailupdate

我需要在 subscribeforum 中插入属于用户组 2 和 12 的所有用户(其余值:forumid 2 和 emailupdate 2)

当然,以下不起作用,因为它“返回多个记录”

INSERT INTO subscribeforum ()
VALUES ((SELECT userid 
         FROM user
         WHERE (usergroupid = 2) OR (usergroupid = 12)), 2, 2)

我想到了以下逻辑:

INSERT INTO subscribeforum (userid, forumid, emailupdate)
VALUES (uid, 2, 2)
WHERE uid IN
(SELECT userid FROM user WHERE (usergroupid = 2) OR (usergroupid = 12))

但是,我不知道完成它的正确方法。

有人知道怎么做吗?

【问题讨论】:

    标签: mysql insert-into


    【解决方案1】:

    试试这个:

    INSERT INTO subscribeforum (userid, forumid, emailupdate)
    SELECT userid ,2, 2 FROM user WHERE (usergroupid = 2) OR (usergroupid = 12)
    GROUP BY userid 
    

    【讨论】:

    • 我自己在网上搜索了一下才弄明白。它如此简单,因为 INSERT INTO SELECT 语法盛行。谢谢达尼洛!
    • (顺便说一句,正确的 forumid 是 12)无论如何,当我尝试执行此操作时:INSERT INTO subscribeforum (userid, forumid, emailupdate) SELECT userid, 21, 2 FROM user WHERE (usergroupid = 2) OR (usergroupid = 12) 我得到:“尝试执行查询时发生错误。返回了以下信息。错误号:1062 错误描述:键 'subindex' 的重复条目 '2-21'”
    • 该表不接受用户2相同的论坛ID,您可以通过用户ID添加一个组来解决这个问题
    • 是的,我现在明白出了什么问题。用户 2 已经存在于论坛 ID 为 21 的 subscribeforum 表中。您认为这会起作用吗? INSERT INTO subscribeforum (userid, forumid, emailupdate) SELECT userid, 21, 2 FROM user WHERE (usergroupid = 2) OR (usergroupid = 12) ON DUPLICATE KEY UPDATE emailupdate = 2;如果密钥重复,只需更新不太重要的 emailupdate 字段?
    • 我执行了四个这样的查询(针对不同的论坛ID)。尽管第一个返回了太多受影响的行,但其他三个按预期工作。所以,我想,就是这样。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2015-07-02
    • 2020-05-06
    • 1970-01-01
    相关资源
    最近更新 更多