在 sqlite3 中:将列从一个表复制到另一个表

Posted

技术标签:

【中文标题】在 sqlite3 中:将列从一个表复制到另一个表【英文标题】:In sqlite3: copy a column from one table to another table 【发布时间】:2013-07-17 14:43:42 【问题描述】:

还有其他几个关于这个主题的 *** 查询,但都没有一个令人满意的答案。

我有一个表 BeerReviews,它缺少一列 (review_text),另一个表 BeerReviewsWithText 缺少一个不同的列 (brewery_name)。否则表格行的排序方式相同,所以我想简单地将 BeerReviews 中的 brewery_name 列附加到 BeerReviewsWithText 中。

我启动 sqlite3 为:

sqlite3 beer_rewiews_with_text.sqlite

然后我通过以下方式附上啤酒评论表:

attach 'beer_reviews.sqlite' as BR

我通过以下方式向 BeerReviewsWithText 添加了一个空列:

alter table BeerReviewsWithText add column beer_brewername varchar;

Multipleother 问题建议使用 insert 填充列,但这会将新行追加到表中,仅填充 beer_brewername 列。

insert into BeerReviewsWithText(beer_brewername) select brewery_name from BeerReviews;

相反,更新似乎填充了空值,但是当我运行以下命令(类似于another question's answer)时,所有 beer_brewername 值都是相同的:

update BeerReviewsWithText set beer_brewername=(select brewery_name from BR.BeerReviews);

这似乎是一种奇怪的行为,因为我在运行时得到了预期的啤酒厂名称列表:

select brewery_name from BR.BeerReviews limit 50;

我是 sqlite 新手,谁能解释一下我做错了什么?

【问题讨论】:

【参考方案1】:

当你使用子查询作为表达式时,像这样:

UPDATE BeerReviewsWithText
SET beer_brewername = (SELECT brewery_name
                       FROM BR.BeerReviews)

那么只会使用子查询返回的第一条记录。

您必须编写一个返回单个记录的子查询,但外部表中的每条记录都有不同的记录。这称为相关子查询:

UPDATE BeerReviewsWithText
SET beer_brewername = (SELECT brewery_name
                       FROM BR.BeerReviews
                       WHERE ID = BeerReviewsWithText.ID)

(假设您有一个 ID 列作为主键。)

【讨论】:

好的,所以我正在运行以下命令,这需要 难以置信 很长时间:update main.BeerReviewsWithText set beer_brewername=(select brewery_name from BR.BeerReviews where brewery_id = main.BeerReviewsWithText.beer_brewerid); brewery_id 和 beer_brewerid 字段都逐行匹配,但不是t 跨行的唯一标识符,因为每个啤酒厂都有许多评论。希望没关系? 只要啤酒厂ID唯一标识啤酒厂名称就可以了。为了高效查找,您需要在 brewery_id 列上建立索引。 向两个 id 列添加索引后,更新在合理的时间内运行。我将不得不阅读更多关于这些如何加快速度的信息。再次感谢!

以上是关于在 sqlite3 中:将列从一个表复制到另一个表的主要内容,如果未能解决你的问题,请参考以下文章

如何将列从一个 CSV 文件复制到另一个 CSV 文件?

使用 PowerShell 将列从一个 csv 文件复制到另一个

将列从一个DataFrame复制到另一个DataFrame会产生NaN值吗?

mysql insert into 或 select into - 将列从 tbl1 复制到 tbl2

Sqlserver 数据库

将列从一个 datagridview 和结果添加到另一个 datagridview