2015-06-16 4 views
0

У меня есть запрос на обновление sql, который выглядит примерно так, но не работает.update query with multiple where clauses

Может кто-то помочь мне исправить это: abc таблица с a_id и avlaue столбцы.

Так в ниже запрос, я хочу сделать avalue = null для a_id = 1 когда a_id = 2 и его значение либо 1, 2 или 3.

update abc set avalue = null where a_id = 1 and (a_id = 2 and avlaue IN (1,2,3)); 
+0

a_id = 1 и (a_id = 2 и avlaue IN (1,2,3)); должен быть a_id = 1 или (a_id = 2 и avleue IN (1,2,3)); –

+0

Я хочу обновить, когда (a_id = 2 и avleue IN (1,2,3)), так или не будет работать – jrs

+0

Да, это будет, скобка сделает предикат id = 1 или (id -2 и avalue в (1,2,3)) попробуйте его с помощью select first –

ответ

1

Попробуйте эту

update abc set avalue = null where a_id=1 or (a_id=2 and avlaue IN(1,2,3)) 
3

Вопрос с and, используйте or вместо этого:

Не исключено, что a_id может быть 1 и 2, попробуйте ниже:

update abc set avalue = null where a_id = 1 or (a_id = 2 and avlaue IN (1,2,3)); 
+0

a_id со значением 1 станет нулевым, только если другая строка, где a_id равна 2, а ее значение равно либо 1,2, либо 3 – jrs

0

Я думаю, что вы имели в виду, чтобы проверить, как

update abc set avalue = null 
where a_id in (1,2) and avlaue IN(1,2,3); 
+0

. Вышеприведенный запрос сделает a_id 2 также null..I только wnat, чтобы chnage значение a_id 1 равнялось нулю. – jrs

+0

Можете ли вы опубликовать образцы данных, которые значительно улучшат логику. Я немного запутался здесь, как должна быть логика обновления? почему вы не можете просто сказать 'where a_id = 1 и avleue IN (1,2,3);' – Rahul

+0

Логика, которая должна быть удовлетворена, такова: если mpc = 1 ИЛИ mpc = 2 ИЛИ mpc = 3, то значение mph будет null. Таким образом, в этом случае mpc, id которого является a_id = 2, а значение может быть 1, 2 или 3, то mph (с a_id = 1) будет null – jrs