我有一个product
表,其中包含以下架构
Column | Type |
----------------+--------------------------+
id | integer |
name | character varying(255) |
和带有架构的location
表
Column | Type |
----------------+--------------------------+
id | integer |
country | character varying(255) |
state | character varying(255) |
region | character varying(255) |
city | character varying(255) |
我需要在两个表之间建立多对多关系,并且product
可以与location
表中的任何级别的位置相关联。例如,产品可以在整个国家或特定地区或城市销售。
如果用户在国家/地区级别选择位置,我可以为映射表中的所有位置创建条目(例如,如果用户选择国家/地区,可以在映射表中为美国所有城市创建条目),但这会创建大量的映射行。
以我可以选择任何级别的位置的方式映射两个表最好的是什么?
答案 0 :(得分:0)
在第三个表格中,您也可以指定级别。因此,您的第三个表格可以说product_location将具有以下提到的字段:
product_id
location_name
location_level
location_level可以包含国家,州,地区,城市等值
例如,您的数据可能如下所示:
product_id location_name location_level
1 India Country
2 New Delhi City
3 North Asia Region
现在选择时您可以使用以下查询:
select loc.*,prod.* from location loc, product prod, product_location prodLoc where prodLoc.location_name ='India' and prodLoc.product_id = prod.id and
case when prodLoc.location_level ='Country' and loc.country= prodLoc.location_name then 'Y'
when prodLoc.location_level ='City' and loc.city= prodLoc.location_name then 'Y'
when prodLoc.location_level ='Region' and loc.region= prodLoc.location_name then 'Y'
else 'N' end ='Y';
P.S:此解决方案是根据您提供的表格设计提供的