【发布时间】:2013-07-25 22:05:10
【问题描述】:
为什么这种构造在 SQLite 中不起作用:
UPDATE table1 SET column1 = (SELECT column2 FROM table2);
其中 column1 和 column2 具有相同的行数和相同的类型。
【问题讨论】:
-
这行不通,两个表之间有没有共同的列?
-
是的,这是列名
为什么这种构造在 SQLite 中不起作用:
UPDATE table1 SET column1 = (SELECT column2 FROM table2);
其中 column1 和 column2 具有相同的行数和相同的类型。
【问题讨论】:
使用公共列查找匹配记录:
UPDATE table1
SET column1 = (SELECT column2
FROM table2
WHERE table2.Name = table1.Name)
【讨论】:
这是行不通的,因为 table1.column1 只需要一个值。您实际上在做的是设置 table1.column1 = table2.column2 的所有结果。
您可能必须在一个公共列或键上将两个表连接在一起
【讨论】:
因为嵌套选择可能返回不止一行。您尝试将 table2 中的所有数据放入 table1 中的 1 个元素中
【讨论】:
Column1 是否只是在整个列中获得相同的值?否则,这里需要在更新中做一个JOIN,并根据join设置Column1 = Column2。
【讨论】:
您没有链接这两个表 所以它试图将所有 column2 值放入每个 table1 行中。
通过一个字段将两者联系在一起,例如 更新 table1 设置 column1 = column2 从 table2 where table1.ColumnA = tables2.ColumnA
【讨论】:
您的语句不起作用的原因是因为您告诉它将column2 的所有值放入table1 中的每个column1 单元格中。你想要更多类似的东西:
UPDATE
table1
SET
table1.column1 = table2.column2
FROM
table1
INNER JOIN
table2
ON
table1.id = table2.table1_id
【讨论】: