2016-05-22 3 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 

Иногда один из этих условий на пункте 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

Просто вручную выберите соединение обновления с одним из условий, вы увидите, есть ли записи для обновления. – sagi

ответ

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 

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 

ли вы скопировать и вставить код? Я думаю, что ничего не обновляется, потому что у вас IN NOT NULL, а не NOT NULL. (Но если вы только что опечатка в вашем вопросе, игнорировать это)

+0

Я подозреваю опечатку. – sagi

+0

Спасибо за точку. но это была просто опечатка. Я отредактировал – stack

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. - [Из обзора] (/ review/low-quality-posts/12436396) –