2013-07-25 53 views
1

我试图做一个更新,跨2表也有一个视图连接连接另外两个表。用3个连接在一个查询中更新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去除量总数和从表moneyq删除1

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

+0

可能复制'http://stackoverflow.com/questions/4361774/mysql-更新多表与一个查询“ –

+0

没有一个在该链接的答案包括加入..所以我不明白它会如何帮助我的情况。 – Sir

+0

你可以参考这个链接'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' –

回答

2

查询中的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演示

+0

它似乎表现正确,我可以问为什么它是'加入'内部加入' – Sir

+0

@Dave这是一样的事情,但较少打字。如果你喜欢明确声明'INNER',那绝对没问题。 – peterm

+0

如果它们与您的查询有什么不同,我的原始版本是什么? – Sir