我有一张大桌子,其中包含美国所有州和县的信息。
表结构是
fullCode countyName stateName stateCode
1 01001 nowhere AL 01
2 01003 somewhere AL 01
3 02100 other AK 02
状态代码始终由fullCode
列中的前两个数字标识。这些对于每个州都是唯一的,因此任何州都不会有多于一组的前两个数字。 countyCode上的最后三个数字。
我使用下面的查询来创建一个包含所有状态的表
select distinct stateName, statecode
into tblStates
from tblCounties
我很好奇如何能够一举为每个州的县创造一张桌子(如果可能的话)。像
这样的东西select distinct fullCode, countyName
into tblAlabamaCounties
from tblCounties
where stateName='AL'
但是对于每个州。当然,我必须处理所有PK / FK问题。只是想知道可能用来做这样的事情的方法。
编辑:如果这是一个设计错误,我还能如何关联处于特定州的县名?我可以将所有东西放在一张大桌子上,但这看起来像是糟糕的设计,想法?
答案 0 :(得分:2)
这可能是您可能会考虑的更好的设计:
州表:
STATE_ID
STATE_ABBREV
STATE_NAME
县表:
COUNTY_ID
STATE_ID
COUNTY_NAME
示例数据:
STATE_ID STATE_ABBREV STATE_NAME
01 AL Alabama
02 AK Alaska
COUNTY_ID STATE_ID COUNTY_NAME
001 01 Nowhere
003 01 Somewhere
100 02 Other
状态表的主键是STATE_ID
您的县表的主键是COUNTY_ID --- AND ---- STATE_ID(COMBINED)
使用这种结构,您只有2个表,您可以使用它们轻松地重现原始的“大”表,以及“完整代码”字段。此外,基于此(更简单/更正常)的结构,更新,查询,创建过程,功能等将变得更加容易。
FWIW
答案 1 :(得分:1)
如果您使用Oracle,您可以创建一个PL-SQL过程,您可以在其中创建所有不同表中的第一个,然后您只需将数据填充到最近创建的新表中。 如果你使用PL SQL程序,你可以这样做。
另一方面,您可以创建不同的表,并在插入之前创建触发器,并且在插入主表之前将数据插入特定的表中。
对不起我的英语我希望你能理解所有并帮助你。