当前的数据库结构包括:
表中的“站点”列包括以下格式的站点ID:
| station_id_1 | station_id_2 | station_id_4 | ...... |
我对JOINED查询非常熟悉,但在这种情况下很难创建一个可以COUNT(country_id)来自FROM国家的单个查询或者来自实际有要约的城镇的城镇...我怎么能加入站列FROM提供表与实际站点之后为了加入更低级别的表格?这有可能吗?
提前谢谢
答案 0 :(得分:0)
以下查询将为您提供具有优惠的不同国家/地区数量。使用Offers
运算符加入Stations
和LIKE
表格,如下所示:
SELECT
COUNT(DISTINCT country_id)
FROM
Offers O
INNER JOIN Stations S
ON O.stations LIKE '%'||S.station_id||'%'
INNER JOIN Areas A
ON S.area_id = A.area_id
INNER JOIN Towns T
ON A.town_id = T.town_id
INNER JOIN Countries C
ON T.country_id = C.country_id;
但是,像Peter建议的那样,建议不要以连续格式存储station_id数据。
答案 1 :(得分:0)
为了扩展@Peter所做的评论,你确实有一个中间表的案例。原因是一个站可能有多个提议,并且提议可能适用于多个站。因此,如果您以后希望在商品表中存储其他列,则该数据将在整个表中重复。如果您希望更新任何信息,通过添加中介进行规范化将最大限度地减少此重复并减少开销 - 例如,提供折扣等。
归功于@Joseph B,他的查询将变成类似:
SELECT
COUNT(DISTINCT country_id)
FROM
Offers O
INNER JOIN Offers_Stations OS
ON OS.offer_id = O.offer_id
INNER JOIN Stations S
ON OS.station_id = S.station_id
INNER JOIN Areas A
ON S.area_id = A.area_id
INNER JOIN Towns T
ON A.town_id = T.town_id
INNER JOIN Countries C
ON T.country_id = C.country_id;