Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 索引现有数据库的最快方法_Sql_Database_Ms Access_Normalization - Fatal编程技术网

Sql 索引现有数据库的最快方法

Sql 索引现有数据库的最快方法,sql,database,ms-access,normalization,Sql,Database,Ms Access,Normalization,我刚从我们现有的会计程序中得到一个excel表格,包括我们公司的所有产品。 我立即注意到字段“HOOFDGROEP”(翻译成“Category”)和“SUBGROEP”(翻译成“Subcategory”)不包括主键,而是字符串值。 我将此表导入access,但现在我想创建两个单独的表,“类别”和“子类别”。这样我就可以为数据库编制索引。我使用SQL查询提取组,如下所示: INSERT INTO Hoofdgroepen SELECT DISTINCT HOOFDGROEP FROM Artike

我刚从我们现有的会计程序中得到一个excel表格,包括我们公司的所有产品。 我立即注意到字段“HOOFDGROEP”(翻译成“Category”)和“SUBGROEP”(翻译成“Subcategory”)不包括主键,而是字符串值。 我将此表导入access,但现在我想创建两个单独的表,“类别”和“子类别”。这样我就可以为数据库编制索引。我使用SQL查询提取组,如下所示:

INSERT INTO Hoofdgroepen
SELECT DISTINCT HOOFDGROEP
FROM Artikelen
但是现在,我如何快速地将所有记录的“HOOFDGROEP”字段替换为其索引值,而无需手动或使用find/replace

例如,我希望尽快创建一个名为hoofdgroepen的表,如下所示(通过上述查询实现):

其中:

ID  §kop_artikel        A_ inv_ product     HOOFDGROEP   
238 80010077            Chappe              Cat V                                    
239 80010517            Beton per m3        Cat V                                    
240 9799044704539       Betalingskorting    Contante betalingskorting   
241 9799044704537       Viszak klein        Diversen        
242 9799044704538       Viszak middel       Diversen    
然后把那张表做成这样:

ID  §kop_artikel        A_ inv_ product     HOOFDGROEP   
238 80010077            Chappe              3                                    
239 80010517            Beton per m3        3                                    
240 9799044704539       Betalingskorting    4   
241 9799044704537       Viszak klein        5
242 9799044704538       Viszak middel       5
大概是这样的:

Dim sSQL As String
Dim db As Database

Set db = CurrentDb

sSQL = "SELECT t.HOOFDGROEP INTO HOOFDGROUP " & _
"FROM aTable t " & _
"GROUP BY t.HOOFDGROEP;"

db.Execute sSQL, dbFailOnError

sSQL = "ALTER TABLE HOOFDGROUP ADD COLUMN ID AUTOINCREMENT"

db.Execute sSQL, dbFailOnError

sSQL = "SELECT t.ID, t.[§kop_artikel], t.[A_ inv_ product], HOOFDGROUP.ID INTO " & _
"aNewTable " & _
"FROM aTable t INNER JOIN HOOFDGROUP ON t.HOOFDGROEP = HOOFDGROUP.HOOFDGROEP;"

db.Execute sSQL, dbFailOnError
根据您的需要,您可能还需要:

 ALTER TABLE HOOFDGROUP ADD PRIMARY KEY(ID)

“我[…]注意到字段[…]不包含主键,但包含字符串值”-没有任何意义。主键也可以是字符串值。那么我以为我学到的关于主键的知识是错误的,我想实现这一点,例如类别“materials”,得到一个索引:1,因此“materials”不会出现数千次,如果您仍然无法实现您的目标,请返回。请发布一个小数据示例,并说明您希望它是什么。在MS Access中创建新字段/列通常非常容易。我猜你想要的是类似于
选择不同的材料,其中Mid(SomeField,3,4)=“something”)
编辑了一个问题,期望的结果是什么这是什么语言?我在哪里使用它?当我尝试单独使用sql查询时,除了最后一个(不是主键)之外,所有的查询都正常工作,这给了我一个错误:结果表不允许有多个自动编号fieldCLng(HOOFDGROEP.ID),因为HOOFDGROEPID修复了这个问题,谢谢!
 ALTER TABLE HOOFDGROUP ADD PRIMARY KEY(ID)