2013-05-16 37 views
0

首先,让我从中得到一些东西:我对SQL的了解非常非常有限(仅仅了解基本的CRUD操作,可悲 - 说话对我来说JOIN和东西,你可能会说世界语)。这是我知道我需要并且实际上正在努力的事情,但这也需要时间,我现在不需要解决这个特定的问题。在SQL Server中查找所有父无子项记录以创建“默认值”子项

我有几个表,就像这样:

TBL_Cities  TBL_Provinces  TBL_Regions  TBL_Countries 
----------  -------------  -----------  ------------- 
CityID   ProvinceID   RegionID   CountryID 
ProvinceID  RegionID   CountryID  CountryCode 
CityCode  ProvinceCode  RegionCode  CountryName 
CityName  ProvinceName  RegionName 

正如你可能会猜测,是的,这些表是通过外键关联从CitiesProvinces,从ProvincesRegions,并从RegionsCountries(请注意,数据库设计不是我的作品,所以我只是在继续我所拥有的)。由于这种结构,有一些省份有几个城市连接到他们,还有一些有的省份没有个城市附属于他们。

由于这种设计,一个人的地址是通过从最底层的位置实体(对于这个特定的例子是城市)进行连接来完成的。目前有意义,对吧?

问题:我需要以某种方式找出所有的无子女Province实体的ID,并在Cities表,生成每个那些无子女Provinces的“默认”项,这样我们的当前地址建筑引擎无需修改当前数据库列结构(即,从City构建“完整”位置并按照我们的方式工作到Country)即可工作。这不仅仅是一点点能力,所以我在这里请求帮助。

我知道这可能太多要问,但有人可以告诉我如何去解决这个问题,或者至少我指出正确的方向吗?

+0

至于人的地址链接到城市,你可能永远不会在你的表城市所有城市将不会在你的表个城市的入境'Unknown_InProvince”是一个更好的解? – bummi

回答

0

要找到你会使用

SELECT ProvinceId FROM TBL_Provinces 
WHERE ProvinceID NOT IN 
(SELECT DISTINCT(ProvinceID) FROM TBL_Cities) 

要为每个省

INSERT INTO TBL_Cities (ProvinceID, CityCode, CityName) 
SELECT ProvinceId, 'DefaultCityCode', 'DefaultCityName' FROM TBL_Provinces 
WHERE ProvinceID NOT IN 
(SELECT DISTINCT(ProvinceID) FROM TBL_Cities) 

我不知道的插入默认值都没有孩子的省份,为什么你会希望添加默认的城市名。如果一个省没有城市,那应该没问题。

+0

“默认城市名称”我的意思是每个没有孩子的省份说“没有找到城市”或类似的东西,但这至少为我提供了一个有效的条目,可以建立从“城市”向上的位置结构, 'Country'。对于我的实际问题没有更清楚,我很抱歉。 – fbordas

0

至于从未所有城市将提供和将需要一个邓贤兰默认城市,我不会限制加入到城市,这样做:

INSERT INTO TBL_Cities (ProvinceID, CityCode, CityName) 
SELECT ProvinceId, '<unknown>', 'DefaultCityName for ' + ProvinceName 
FROM TBL_Provinces 

,防止重复运行查询不止一次,你更可以使用

INSERT INTO TBL_Cities (ProvinceID, CityCode, CityName) 
SELECT ProvinceId, '<unknown>', 'DefaultCityName for ' + ProvinceName 
FROM TBL_Provinces 
LEFT JOIN TBL_Cities C on C.CityName='DefaultCityName for ' + ProvinceName 
where C.CityID is NULL 
相关问题