我如何理解哪种情况失败了?

时间:2016-05-22 15:24:44

标签: mysql sql sql-update

我有这样的查询:

UPDATE table1 t1
  JOIN table2 t2
    ON t1.col1 = t2.col2
SET t1.col3 = "something"
WHERE t1.col4 = t2.col3 AND
      t1.col5 IS NOT NULL

有时WHERE子句中的一个条件是FALSE,然后没有任何更新。我试图理解为什么没有更新?我的意思是我想为每个条件设置一个错误,以指定我的条件是FALSE

我不确定但是使用@variable或使用CASE WHEN可能是一种方法。有什么解决方案吗?

我在现实中的查询:

UPDATE
     qanda AS ans1
JOIN qanda AS ans2 ON ans2.related = ans1.related
JOIN qanda AS ques ON ans2.related = ques.id
SET ans1.acceptedanswer = IF( ans1.id <> ?, 0, IFNULL( ans1.acceptedanswer, 0 ) ^ b'1' ),
ans1.aadate = IF( ans1.id <> ?, ans1.aadate, ?)                                                             
WHERE ques.author_id = ?
  AND ans2.id = ?
  AND ans2.author_id = ? 
  AND (ques.amount IS NULL or ans1.acceptedanswer IS NULL

2 个答案:

答案 0 :(得分:0)

您可以尝试SELECTCASE打印失败的条件,如下所示:

SELECT
CASE 
   WHEN (t1.col4 = t2.col3) = FALSE THEN 'FAILED condition: t1.col4 = t2.col3'
   WHEN (t1.col5 IS NOT NULL) = FALSE THEN 'FAILED condition: t1.col5 IS NOT NULL'
END
 FROM table1 t1
  JOIN table2 t2
    ON t1.col1 = t2.col2
SET t1.col3 = "something"
WHERE (t1.col4 = t2.col3 AND
      t1.col5 IS NOT NULL) = FALSE

编辑: UPDATE返回实际更改的行数请参阅MySql ref。 所以你需要在不同的调用中运行它。

N.B。我没有运行它;只是试图分享一个概念。

答案 1 :(得分:-1)

UPDATE table1 t1
  JOIN table2 t2
    ON t1.col1 = t2.col2
SET t1.col3 = "something"
WHERE t1.col4 = t2.col3 AND
      t1.col5 `IS` NOT NULL

您是否复制并粘贴了代码?我认为没有更新,因为你有IN NOT NULL而不是IS NOT NULL。 (但如果你的问题中只有一个拼写错误,请忽略这一点)