将表连接到更新

时间:2013-02-06 16:52:37

标签: mysql sql sql-update left-join

我可以这样做来更新一行吗?这是我第一次使用带有LEFT JOIN的{​​{1}}。

UPDATE

它不会抛出错误,但它表示即使我确认我的变量对正确的数据没有影响,也会影响0行。 (即使我对数据进行硬编码)。

编辑:我也尝试过内部联接,但也无效。

编辑2 :这实际上就是我想要做的事情,我有这两个问题并且工作正常。我正在尝试将代码简化为一个。可以这样做:

UPDATE comments AS r

LEFT JOIN items AS i 
        ON i.items_id = r.item_id
LEFT JOIN master_cat AS c
        ON c.cat_id = i.items_id  
SET r.good = r.good + 1 
WHERE i.item = '{$item}' AND c.category = '{$cat}' AND r.review = '{$review}';

3 个答案:

答案 0 :(得分:3)

如果你是外连接到表c,然后你在表c中的字段上有一个where子句,你实际上有一个内部连接,因为如果连接条件未命中,where子句将不匹配任何内容。 / p>

答案 1 :(得分:3)

你为什么要做LEFT JOIN?您没有使用连接表中的任何列来更新行...所以我假设连接表的目的是将行限制在comments中增加到只有那些在相关表格中匹配。

您受到0行影响的原因是您在WHERE子句中为左连接表添加了其他条件,这实际上是将每个LEFT JOIN转换为{{1} }}

假设这是您的查询的简化版本,并且您有其他原因想要使用INNER JOIN,您可以通过将条件移到LEFT JOIN子句中来解决此问题:

ON

答案 2 :(得分:2)

您的问题是在UPDATE声明中您的加入不匹配(cat_iditems_id):

LEFT JOIN master_cat AS c
        ON c.cat_id = i.items_id  

SELECT(正在运行)中,您正确连接:

LEFT JOIN master_cat AS c
        ON c.cat_id = i.cat_id