mysql - 克服多余的行

标签 mysql sql insert

我必须从不同的表中插入多个列,但仍然遇到同样的问题。

问题是这样的:我可以将 TableA.ColumnA 中的列插入 TableB.ColumnA 没问题。但接下来我需要将 TableC.columnA INSERT TableC.columnA 插入 TableB.columnB 并且此 INSERT 命令添加额外的行来更改数据的 id。

我的插入命令,加上我为使 id 匹配(未成功)而执行的更新命令如下。

我知道 insert 命令可以添加额外的行,但我如何传递它以便 id 匹配?

我想也许这些列设置了自动递增,但它们没有——所以这似乎不是问题所在。非常感谢任何帮助。

(1) INSERT INTO users_posts 
           (author_id, 
            post_id, 
            post_title)  
    SELECT contents.user_id, contents.id, contents.title 
    FROM contents 
    WHERE contents.id = id

(2) INSERT INTO users_posts 
           (post_content)  
    SELECT content_bodies.content 
    FROM content_bodies 
    WHERE content_bodies.id = id

(3) UPDATE users_posts 
    SET post_content  = (SELECT content_bodies.content  
                         FROM content_bodies  
                         WHERE content_bodies.id = users_posts.post_id)

最佳答案

如果我理解你的问题是正确的,你实际上不需要你的第二个和第三个语句,而只是一个更新语句来更新 users_posts.post_content

如果您执行插入,它总是(假设它不会因其他原因(即约束)而失败)插入新行,因此关键字 INSERT

试试这个语句,它根据 ids 从 content_bodies 表将帖子内容添加到 users_posts 表!

UPDATE users_posts AS u 
JOIN content_bodies AS b 
ON b.id = u.post_id 
SET u.post_content = b.content;

用这个 SQLFiddle 查看它的实际效果

编辑

请运行此查询并让我知道它是否正确匹配数据

SELECT * FROM users_posts u
JOIN content_bodies AS b 
ON b.id = u.post_id 

关于mysql - 克服多余的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581069/

相关文章:

php - 批量 INSERT foreach 语句

php - 批量插入查询mysql后如何从表中获取总插入行数

mysql - "Unknown column"在 JOIN 中两次使用同一个表时出错

mysql - 在 Slick 3.1.0-M1 中使用 java.util.Date

mysql - Docker 容器 - MYSQL_RANDOM_ROOT_PASSWORD 未在 STDOUT 中显示输出

php - MySQL 列的整数值 '' 不正确且允许空值?

mysql - 如何将 AND 语句与 SELECT DISTINCT 一起使用?

c# - 从使用 EF 代码优先 SQL Server Express 方法更改为使用标准 Management Studio

mysql - SQL 第二个 INSERT 查询,其 ID 为第一个查询

sql - ORA-00917 : missing comma when insert not exist in oracle