0

首先让我解决一些问题:我对 SQL 的了解非常非常有限(遗憾的是,仅了解基本的 CRUD 操作——和我谈谈 JOIN 和其他东西,你可能会说世界语)。这是我知道我需要并且实际上正在努力的事情,但这也是需要时间的事情,我目前不需要解决这个特定问题。

我有几张桌子,像这样:

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

正如您可能推测的那样,是的,这些表是通过外键 from Citiesto Provinces、 from ProvincestoRegions和 from Regionsto相关联的Countries(请注意,数据库设计不是我的创作,所以我只是转发我所拥有的。)在这种结构中,有一些省附有几个城市,也有一些省没有附有城市。

由于这种设计,一个人的地址是通过从最底部的位置实体(在这个特定示例中是城市)链接起来完成的。到目前为止是有道理的,对吧?

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

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

4

2 回答 2

0

至于永远不会提供所有城市并且需要一个 Provice 的默认城市,我不会限制添加到城市并执行以下操作:

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
于 2013-05-16T22:38:47.143 回答
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)

我不确定您为什么要添加默认城市名称。如果一个省没有城市应该没问题。

于 2013-05-16T22:20:33.637 回答