2016-05-22 7 views
0

私はこのようなクエリを持っている:どのような条件が失敗するのかをどのように理解できますか?

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 

これらの条件の時々1 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

私は質問を理解していない、あなたは出力として何をしたいですか?レコードの半分は 'col5 is null'で、残りの半分は最初の条件で失敗しますか? – sagi

+0

@sagi何か更新があった場合、何も取得する必要はありません。しかし、更新が失敗した場合(何も更新されません)。なぜそれが失敗するのか知る必要がありますか? – stack

+0

条件の1つで更新の結合を手動で選択するだけで、更新するレコードがある場合に表示されます。 – sagi

答えて

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 

EDIT:その行数を返しますUPDATE実際に変更されましたMySql refを参照してください。 別の呼び出しで実行する必要があります。

N.B.私はそれを実行しませんでした。ちょうどコンセプトを共有しようとしました。

+0

私はそれが動作するかどうかは分かりませんが、動作すれば、それはまさに私が探しているものです。 – stack

+0

ただし、クエリが不完全です。 'UPDATE'節はどこにありますか? – stack

+0

私はそれを実行しませんでした。しかし、それは動作するはずです。それを実行してください(少しの構文修正が必要な場合があります)。フィードバック –

-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 

コピー&ペーストしましたか?私はIS NOT NULLではなくIN NOT NULLを持っているので、何も更新していないと思います。 (しかし、あなたはちょうどあなたの質問にタイプミスがあった場合は、これを無視)

+0

私はタイプミスを疑う。 – sagi

+0

ポイントをありがとう。それはただのタイプミスでした。私は編集しました – stack

+0

これは質問への答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューの投稿](レビュー/低品質の投稿/ 12436396) –

関連する問題