sqlite - 在 sqlite3 : copy a column from one table to another table

标签 sqlite

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

我有一个 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;

Multiple other问题建议使用插入来填充列,但这会将新行附加到表中,仅填充 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 的新手,所以有人可以解释我做错了什么吗?

最佳答案

当您将子查询用作表达式时,如下所示:

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 列作为主键。)

关于sqlite - 在 sqlite3 : copy a column from one table to another table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702902/

相关文章:

iphone - 如何从经度/纬度获取附近的位置?

Android 将 Sqlite View 与 Table 混淆,并尝试对其进行自动索引

ios - Sqlite_prepare_v2返回SQLite_ERROR

r - R 中最快的 Tall-Wide 旋转

安卓 : Change SQLite DB on upgrade

android - SQLite 上下文.MODE_PRIVATE

sql - 对 SQLite 上标记的行进行计数

python-3.x - Apache - sqlite3.OperationalError : attempt to write a readonly database

android - 通过 ContentValues 处理 Blob 数据类型

Android:如何在推送到服务器之前将新生成的模型存储在数据库中(id 问题)