我正在尝试规范化使用多个列进行相同操作的数据库。例如,Street, Street2, ..., Street12
。我目前的计划是创建一个单独的Street
表,其中包含Street
和mainID
的列(加上此表的新ID字段),其中mainID
是主要的主数据库的关键。 (Example)根据需要,每个mainID
都可以链接到多个街道记录,从而可以删除主表中的街道列。
我打算通过子查询(根据this page)引用这个新表来简化我们的搜索表单。 (您可以想象,现在维护起来有些困难。)此结构的示例查询可能是SELECT name FROM mainDB WHERE fID IN (SELECT fID FROM idStreets WHERE street=[inputItem]);
。
问题是数据库已经有大约17000个条目;用手合理纠正太多了。我应该如何自动进行转换?
答案 0 :(得分:2)
首先,要创建Streets
表运行联合查询,然后将其输出到表:
SELECT mainID, Street1
FROM maintable;
UNION
SELECT mainID, Street2
FROM maintable;
...
UNION
SELECT mainID, Street12
FROM maintable;
然后是生成表查询,然后添加自动编号。
SELECT * INTO Street FROM unionqry;
最后,您的子查询很可能是一个简单的连接:
SELECT name FROM mainDB
WHERE fID IN
(SELECT fID FROM idStreets WHERE street=[inputItem]);
成为:
SELECT DISTINCT name FROM mainDB
INNER JOIN Streets ON mainDB.fID = Streets.mainID
WHERE street=[inputItem]);