【问题标题】:What's wrong with this UPDATE statement?这个 UPDATE 语句有什么问题?
【发布时间】:2011-08-22 07:02:09
【问题描述】:

我需要运行 SQL 查询

UPDATE function
SET active = 0
WHERE unitRef IN
    (SELECT unitRef 
       FROM project_unit 
      WHERE projectRef = 1);

当我运行这个查询时,phpmyadmin 说有 0 行受到影响。 但是,当我独立运行以下代码时:

SELECT unitRef 
  FROM project_unit 
 WHERE projectRef = 1

它返回超过 1 行。

我做错了吗?

【问题讨论】:

  • 不应该是update function set active=0...吗?

标签: sql subquery sql-update


【解决方案1】:

这两个构造不等价。相反,试试这个

SELECT * 
  FROM function
 WHERE unitRef in
    (select 
    unitRef 
    from project_unit 
    where projectRef=1);

【讨论】:

  • @DonkeyKong:这是必须返回一些数据的查询。将 'UPDATE Table SET ...' 替换为 'SELECT * FROM Table' 以查看将更新哪些行。
【解决方案2】:

您缺少“SET”关键字...

UPDATE `function`
SET active = 0
WHERE unitRef IN (SELECT unitRef FROM project_unit WHERE projectRef = 1);

虽然这会给你一个错误,但不仅仅是说0 row(s) affected。子查询返回的值是否存在于表function 的字段unitRef 中?

【讨论】:

  • 是的,该列存在。我已经编辑了这个问题。我忘了只输入有问题的 set 关键字。这就是为什么它没有给我一个错误..
  • 抱歉——措辞不当。子查询返回的值是否存在于表function 的字段unitRef 中,这是我应该说的。
【解决方案3】:

对于 MS SQL Server:

UPDATE [function]
SET active=0
WHERE unitRef in
    (SELECT
    pu.unitRef 
    FROM project_unit as pu
    WHERE pu.projectRef=1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多