【问题标题】:Quickest way to index an existing database索引现有数据库的最快方法
【发布时间】:2014-09-04 11:03:00
【问题描述】:

我刚刚从我们现有的会计程序中获得了一张 Excel 表格,其中包括我们公司的所有产品。 我立即注意到“HOOFDGROEP”(翻译为“类别”)和“SUBGROEP”(翻译为“子类别”)字段不包括主键,而是字符串值。 我将此表导入访问,但现在我想制作 2 个单独的表,“类别”和“子类别”。这样我可以索引数据库。我使用 SQL 查询来提取这样的组:

INSERT INTO Hoofdgroepen
SELECT DISTINCT HOOFDGROEP
FROM Artikelen

但是现在如何在不手动或查找/替换的情况下快速将所有记录的“HOOFDGROEP”字段替换为其索引值?

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

ID  HOOFDGROEP
3   Cat V
4   Contante betalingskorting
5   Diversen

除此之外:

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

【问题讨论】:

  • "我 [..] 注意到字段 [..] 不包括主键,但字符串值" - 不构成 任何 感觉。主键也可以是字符串值。
  • 那么我认为我对主键的了解是错误的,我想实现例如“材料”类别,获得索引:1,这样“材料”就不会出现数千次
  • Read the documentation on indexing 如果您仍然无法实现您想要的,请回来。
  • 请张贴一个小数据样本并说明您希望它是什么。在 MS Access 中创建新字段/列通常非常容易。我怀疑你想要类似SELECT DISTINCT INTO Materials WHERE Mid(SomeField,3,4) = 'Something')
  • 编辑了期望的结果是什么问题

标签: sql database ms-access normalization


【解决方案1】:

类似这样的:

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)

【讨论】:

  • 这是什么语言?我在哪里使用这个?
  • 当尝试单独使用 sql 查询时,除了最后一个(不是主键)之外,一切都正常工作给了我这个错误:结果表不允许有多个自动编号字段
  • CLng(HOOFDGROEP.ID) AS HOOFDGROEPID 解决了这个问题,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多