我正在尝试从副本中更新table1,table2已给出列列表。
在给定列名列表的情况下,如何编写sql命令从table2动态更新table1中的所有列?
我正在尝试避免对sql查询中的column1,column2进行硬编码。
frozenset
答案 0 :(得分:1)
您可以尝试以下选项:
column_names = ['column1', 'column2']
sql_cmd = (""" UPDATE table1 SET table1.{} = table2.{},
table1.{} = table2.{}
FROM table2 WHERE table1.id = table2.id""").format(column_names[0], column_names[0], column_names[1], column_names[1])
print(sql_cmd)
使用宏对Jinja2代码进行采样:
{% macro macro_join_condition(tab_prefix_1, tab_prefix_2, columns) %}
{% for col in columns %}
{% if loop.first %}
{{ tab_prefix_1 }}{{ col }} = {{ tab_prefix_2 }}{{ col }}
{% else %}
and {{ tab_prefix_1 }}{{ col }} = {{ tab_prefix_2 }}{{ col }}
{% endif %}
{% endfor %}
{% endmacro %}
select *
from source_data sd right join target_data td on {{ macro_join_condition('td.','sd.', params.primaryKeyList) }}