我有两个excel表格中包含大量数据,其中包含以下列:
IS_IN_DB(db, 'users.id')
-relationship介于 sheet1.pod 和 sheet2.pod 之间(一对多关系)
我需要一个sql将excel表中的数据插入到具有以下表结构的访问数据库中:
EXCEL DATA
Sheet1 [pod, client, address, ...etc] -one record per [pod]
Sheet2 [pod, pointofmeasure, typepct, ...etc] -one-to-many records per [pod]
table2.pod_id = table1.id
可以在一个sql插件中执行吗?
我想出了这个大量插页......
ACCESS DATABASE
Table1 [id, pod, client, address, ...etc]
Table2 [id, pod_id, pod, pointofmeasure, typepct, ...etc]
现在我怎么得到id来向table2插入数据?
答案 0 :(得分:0)
假设表1中的pod-column是唯一的,您必须插入,再次选择条件SELECT id FROM table1 WHERE pod = 'myCurrentPod'
并且有您的ID。
如果pod不是唯一的,即使具有其他已知值的pod也不是唯一的,也没有机会这样做。 如果具有其他已知值的pod是唯一的,则可以使用更多条件展开上部语句。
在所有情况下,你不能进行质量插入,但是从sheet1插入一行,从sheet2插入链接的行,下一个sheet1-row等等。
如果您可以设计表格,则不应使用自动增量ID,而应使用应用程序集ID。或者,如果pod中的值非常独特,请将其用作pk。
答案 1 :(得分:0)
当您的列被正确命名时(即每个属性在整个架构中唯一且一致地命名)并且外键按预期设置时,可以在一个插入中完成。
这是使用SQL DDL for Access ANSI-92 Query Mode的快速草图(您可以使用Access UI创建相同的对象):
CREATE TABLE TableA
( ID IDENTITY NOT NULL UNIQUE,
a_col INTEGER NOT NULL );
CREATE TABLE TableB
( ID INTEGER NOT NULL UNIQUE
REFERENCES TableA ( ID ),
b_col INTEGER NOT NULL );
CREATE VIEW TestAB
( a_ID, a_col, b_ID, b_col ) AS
SELECT A1.ID, A1.a_col, B1.ID, B1.b_col
FROM TableA AS A1
INNER JOIN TableB AS B1 ON A1.ID = B1.ID;
如果您然后通过视图插入,省略ID
列(从而允许它自动生成),如下所示:
INSERT INTO TestAB ( a_col, b_col ) VALUES ( 55, 99 );
然后将在每个表中插入一行用于单个SQL命令。
也就是说,在命名属性时看起来不够严格,例如Table1.id
将名称更改为pod_id
中的Table2
,id
在您的架构中不是唯一的。
答案 2 :(得分:0)
我发现了这个...
INSERT INTO [table1] ([data])
OUTPUT [inserted].[id], [external_table].[col2]
INTO [table2] SELECT [col1]
FROM [external_table]
并在最后一次SELECT ...在工作表之间进行JOIN以检索所有数据?
它的工作方式是什么?