Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mise à jour d'une table à partir d'une autre table avec plusieurs colonnes dans sqlalchemy

Je ne pense pas que tu puisses. Ainsi, ce n'est pas vraiment une réponse, mais c'est beaucoup trop long pour un commentaire.

Vous pouvez facilement composer votre requête avec 2 colonnes (je suppose que vous le saviez déjà) :

select_query = select([table2.c.col1, table2.c.col2]).where(table1.c.key == table2.c.key)

et ensuite vous pouvez utiliser la méthode with_only_columns() , voir api :

In[52]: print(table.update().values(col1 = select_query.with_only_columns([table2.c.col1]), col2 = select_query.with_only_columns([table2.c.col2])))
UPDATE table SET a=(SELECT tweet.id 
FROM tweet 
WHERE tweet.id IS NOT NULL), b=(SELECT tweet.user_id 
FROM tweet 
WHERE tweet.id IS NOT NULL)

Mais comme vous le voyez dans l'instruction de mise à jour, vous ferez effectivement deux sélections. (Désolé, je n'ai pas complètement adapté la sortie à votre exemple, mais je suis sûr que vous avez compris).

Je ne sais pas si, comme vous le dites, MySQL sera assez intelligent pour en faire une seule requête. Je suppose. J'espère que ça aide quand même.