首先让我得到一些东西:我对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
正如您可能猜测的那样,是的,表格通过从Cities
到Provinces
,从Provinces
到Regions
以及{{1}的外键相关联} Regions
(请注意数据库设计不是我的创作,所以我只是转发我所拥有的。)由于这种结构,有许多省份附有几个城市,而且还有一些省份附有 no 城市。
由于这种设计,一个人的地址是通过从最底部的位置实体(对于这个特定的例子,将是城市)链接来完成的。到目前为止有道理,对吧?
问题:我需要以某种方式找出所有无子Countries
实体的ID,并在Province
表中为每个实体生成一个“默认”条目那些没有孩子的Cities
,这样我们当前的地址构建引擎就可以工作,而不必修改当前的数据库列结构(即,从Provinces
构建一个“完整”位置,然后一直工作到City
)。这......不仅仅是我的能力,所以我在这里请求帮助。
我知道这可能太多了,但有人可以告诉我如何解决这个问题,或者至少让我指向正确的方向吗?
答案 0 :(得分: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)
我不确定您为什么要添加默认城市名称。如果一个省没有城市,那就应该没事了。
答案 1 :(得分: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