2015-08-13 3 views
1

У меня есть список ID [1,5,8, ...]. У меня также есть таблица (TableA), которая имеет 100 строк (что точно соответствует моему списку идентификаторов). У меня есть другая таблица (TableB), у которой есть тонны строк (2000), и я хочу обновить один столбец (True/False) на основе того, существует ли первичный ключ в первичных ключах TableA (или мой список идентификаторов python - то же самое).PostGres Значения обновления SQL на основе списка идентификаторов или первичных ключей в другой таблице

В настоящее время я Переберите мой список идентификаторов и просто сделать просто обновить заявление (ниже код питона):

for id in ID_List: 
    cur.execute('update TableB set "Column1"=%s where "ID"=%s', (False,id)) 

Это прекрасно работает - но мне интересно, если есть один код строки я мог а не цикл. Что-то вроде:

cur.execute('update TableB set "Column1"=False where "ID" in ID_List') 
or 
cur.execute('update TableB set "Column1"=False where "ID" in TableA.keys()' 

и все строки в ID_List будут быстро обновляться. Я не могу использовать «>» или «<», потому что идентификаторы могут не быть больше или меньше определенного числа. Я могу изменить ID (3,6,9), но не (4,7,8).

ответ

1

Вы могли бы попробовать что-то вроде этого:

update TableB set "Column1"=False where TableB."ID" in (select TableA."ID" from TableA) 
+0

это, кажется, работает хорошо - спасибо! – mcfly

Смежные вопросы