我在 SQL Server 数据库 (SSMS) 中有 1000 个表,想将 1000 个表中的选定列合并到 1 个新表中。
我想做这样的事情
创建一个包含 a、b、c 列的新表
确定要从中选择数据的 1000 个表 - 要根据通配符之类的内容选择表名。
在数据库中,有很多表,名称都遵循类似的模式,例如ABC_0001
, ABC_0002
... ABC_1000
, XYZ_0001
, XYZ_0002
, ... XYZ_1000
等等...我只想要以ABC
待选..
从这 1000 个表中选择列 a、b、c 并将值插入到步骤 #1 中创建的表中
我是这样做的:
SELECT a, b, c FROM ABC_0001 UNION_ALL
SELECT a, b, c FROM ABC_0002 UNION_ALL
SELECT a, b, c FROM ABC_1000
INSERT INTO NEW_TABLE
并且想做类似的事情
SELECT a, b, c FROM TABLE LIKE ABC_%
INSERT INTO NEW_TABLE
答案 0 :(得分:2)
您可以使用 [2021-04-08 05:47:47,431] {taskinstance.py:901} INFO - Executing <Task(PythonOperator): a> on 2021-04-08T05:47:31.333405+00:00
[2021-04-08 05:47:47,434] {standard_task_runner.py:54} INFO - Started process 2665 to run task
[2021-04-08 05:47:47,463] {standard_task_runner.py:77} INFO - Running: ['airflow', 'run', 'trigger_dag', 'a', '2021-04-08T05:47:31.333405+00:00', '--job_id', '36', '--pool', 'default_pool', '--raw', '-sd', 'DAGS_FOLDER/trigger.py', '--cfg_path', '/tmp/tmpwoshw679']
[2021-04-08 05:47:47,464] {standard_task_runner.py:78} INFO - Job 36: Subtask a
[2021-04-08 05:47:47,512] {logging_mixin.py:112} INFO - Running <TaskInstance: trigger_dag.a 2021-04-08T05:47:31.333405+00:00 [running]> on host 953a6668d603
[2021-04-08 05:47:47,564] {logging_mixin.py:112} INFO - super-duper
[2021-04-08 05:47:47,564] {python_operator.py:114} INFO - Done. Returned value was: None
[2021-04-08 05:47:47,574] {taskinstance.py:1070} INFO - Marking task as SUCCESS.dag_id=trigger_dag, task_id=a, execution_date=20210408T054731, start_date=20210408T054747, end_date=20210408T054747
[2021-04-08 05:47:52,388] {local_task_job.py:102} INFO - Task exited with return code 0
和 Dynamic SQL
来实现这一点,我使用 CURSOR OR WHILE LOOP
实现了它。如果您不想在新表中插入重复条目,请使用 CURSOR
而不是 UNION
。
UNION ALL
答案 1 :(得分:0)
您可以执行以下操作:
-- use 'UNION' to select only distinct values, and UNION ALL if you want to select all rows
SELECT *
INTO [NEW_TABLE]
FROM ABC_001
UNION ALL
SELECT * FROM ABC_002
UNION ALL
SELECT * FROM ABC_003
UNION ALL
-- and so on...
SELECT * FROM ABC_999
-- there's no need to use UNION on the last select
如果您真的不想键入所有 999 多个表,您可以编写一个存储过程来从名称与您想要的模式匹配的表中进行选择。
参考文献:
https://www.w3schools.com/sql/sql_ref_union.asp
SELECT INTO USING UNION QUERY
SQL Server select data from 100+ tables