【问题标题】:SQLite. "UPDATE table1 SET column1 = (SELECT column2 FROM table2);" is not workingSQLite。 “UPDATE table1 SET column1 = (SELECT column2 FROM table2);”不管用
【发布时间】:2013-07-25 22:05:10
【问题描述】:

为什么这种构造在 SQLite 中不起作用:

UPDATE table1 SET column1 = (SELECT column2 FROM table2);

其中 column1 和 column2 具有相同的行数和相同的类型。

【问题讨论】:

  • 这行不通,两个表之间有没有共同的列?
  • 是的,这是列名

标签: sql sqlite


【解决方案1】:

使用公共列查找匹配记录:

UPDATE table1
SET column1 = (SELECT column2
               FROM table2
               WHERE table2.Name = table1.Name)

【讨论】:

    【解决方案2】:

    这是行不通的,因为 table1.column1 只需要一个值。您实际上在做的是设置 table1.column1 = table2.column2 的所有结果。

    您可能必须在一个公共列或键上将两个表连接在一起

    【讨论】:

      【解决方案3】:

      因为嵌套选择可能返回不止一行。您尝试将 table2 中的所有数据放入 table1 中的 1 个元素中

      【讨论】:

        【解决方案4】:

        Column1 是否只是在整个列中获得相同的值?否则,这里需要在更新中做一个JOIN,并根据join设置Column1 = Column2。

        【讨论】:

          【解决方案5】:

          您没有链接这两个表 所以它试图将所有 column2 值放入每个 table1 行中。

          通过一个字段将两者联系在一起,例如 更新 table1 设置 column1 = column2 从 table2 where table1.ColumnA = tables2.ColumnA

          【讨论】:

            【解决方案6】:

            您的语句不起作用的原因是因为您告诉它将column2 的所有值放入table1 中的每个column1 单元格中。你想要更多类似的东西:

            UPDATE
                table1
            SET
                table1.column1 = table2.column2
            FROM
                table1
            INNER JOIN
                table2
            ON
                table1.id = table2.table1_id
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-01-20
              • 2018-02-20
              • 2017-08-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-11-15
              • 2014-06-17
              相关资源
              最近更新 更多