我有这样的查询:
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
答案 0 :(得分:0)
您可以尝试SELECT
和CASE
打印失败的条件,如下所示:
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。 (但如果你的问题中只有一个拼写错误,请忽略这一点)