【问题标题】:Update 2 different tables in one query with 3 joins?在一个查询中使用 3 个连接更新 2 个不同的表?
【发布时间】:2013-07-25 14:55:14
【问题描述】:

我正在尝试对 2 个表进行更新,该表也有一个视图连接,连接了另外两个表。

我没有收到语法错误,但受影响的行为零,所以我想知道逻辑是如何编写的。这就是我尝试过的:

UPDATE resources R
    INNER JOIN cost C
    ON R.rid=R.rid          

    INNER JOIN users U
    ON R.uid=U.uid

    INNER JOIN money M
    ON M.bid=C.bid

   SET R.q = R.q - C.q, M.q = M.q - 1
   WHERE C.bid=? AND U.uid= ?

如果我删除查询 M.q = M.q - 1 的这一部分和 M 的连接,它工作正常,但如果我添加它,那么每个行都不会更新。

该查询支持根据cost quantityresources 中删除总数,并从表money 字段q 中删除1

我该如何解决这个问题 =/?

【问题讨论】:

  • 可能重复http://stackoverflow.com/questions/4361774/mysql-update-multiple-tables-with-one-query
  • 该链接中没有一个答案包括联接。所以我看不出它对我的情况有何帮助。
  • 你可以参考这个链接http://stackoverflow.com/questions/3707815/update-multiple-tables-in-a-single-update-statement-with-left-join。如果您使用的是 MS-SQL,那么 Sql 2008 有一个 Merge 语句,您可以通过它在单个块中执行多个语句。请参阅此 http://stackoverflow.com/questions/2695116/update-multiple-table-column-values-using-single-query
  • 好吧,我什至不知道我是否需要左连接,因此我为什么要寻求帮助。 :)
  • 这两个链接也不是mysql 所以对我的情况再次没有帮助。

标签: mysql pdo


【解决方案1】:

您的查询中的 JOIN 条件存在问题。马上你就有了R.rid=R.rid 这不可能是对的。

现在,恕我直言,从您的示例数据中推断出您的查询应该是这样的

UPDATE resources R JOIN costs C
    ON R.uid = C.rid JOIN users U
    ON R.uid = U.uid JOIN money M
    ON M.uid = C.rid
   SET R.q = R.q - C.q, M.q = M.q - 1
 WHERE C.bid = 3 
   AND U.uid = 1

这里是SQLFiddle演示

【讨论】:

  • 它似乎表现正确,请问为什么它是 joins 而不是 inner joins
  • @Dave 这是一样的东西,但打字少。如果您更愿意明确声明INNER,那绝对没问题。
  • 如果它们与您的查询相同,我的原始查询有何不同?
  • @Dave JOIN 条件不同R.uid = C.rid, M.uid = C.rid
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 2013-07-04
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多