我正在为父客户端记录与SQL连接进行斗争并且刚刚发布了一个查询,但是在发布之后我意识到我的示例有点错误(但仍然是一个有用的帖子)所以我创建了一个新的,更准确的:)
如果我有以下数据库结构:
Table Regions
|Region_no | Region_Level | owning_region_no |
| 1 | 1 | |
| 2 | 2 | 1 |
| 3 | 2 | 1 |
| 4 | 3 | 2 |
| 5 | 3 | 2 |
| 6 | 3 | 3 |
Table Postcodes
| Postcode | Region_no |
| PO32 3AE | 4 |
| PO32 3AA | 5 |
| PO32 3AF | 6 |
Table UnitsMappings
| Unit_No | region_no |
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 2 | 1 |
| 3 | 3 |
| 3 | 3 |
| 4 | 6 |
| 4 | 5 |
Table Units
| Unit_no | Unit_Name |
| 1 | South |
| 2 | SouthEast |
| 3 | Central |
| 4 | SouthWest |
[更新样本答案] 我真正想要的是以下内容:
| Unit_name | Postcode |
| South | PO32 3AE |
| South | PO32 3AA |
| South | PO32 3AF |
| SouthEast | PO32 3AE |
| SouthEast | PO32 3AA |
| SouthEast | PO32 3AF |
即使南方只有区域1和2映射到它,级别3也会映射到级别2和1然后(并且邮政编码将映射到级别3& #39; S)
现在困难在于,我只想要与区域中的3级区域级别相关联的邮政编码(来自邮政编码表)。因此可能存在与unit_no关联的区域级别1,但是我需要底部的所有映射到级别3的邮政编码。
答案 0 :(得分:0)
根据您的详细信息,这是我的映射,
unit => units_mapping
units_mapping => (邮政编码或地区)//假设使用所有表我们使用邮政编码
邮政编码=>区域
地区(主要)
select reg.region_no, Units.name , pc.postcodes
from regions reg,
Postcodes pc,
UnitsMappings UM,
Units units
where reg.region_no = pc.region_no and
pc.region_no = UM.region_no and
UM.Unit_No = Units.Unit_no
order by reg.region_no asc
如果一个表中有空,则不会出现记录...
处理使用内连接
尚未测试.....只是假设:)
答案 1 :(得分:0)
区域级别3中的区域的测试数据中没有有效的单位名称。
区域级别为3的区域为4,5和6。 没有与区域4相关联的单元,与区域5和6相关联的单元是单元4,但在表unit_name中没有单元4。
如果您有数据,那么此查询将获取数据
SELECT pc.postcode, u.unit_name
FROM regions reg
INNER JOIN Postcodes pc ON reg.region_no = pc.region_no
INNER JOIN UnitsMappings um ON reg.region_no = um.region_no
INNER JOIN Units u ON um.unit_no = u.unit_no
WHERE reg.region_level = 3
将单位的连接从INNER更改为LEFT将获得带有NULL作为unit_name的测试数据的邮政编码。
答案 2 :(得分:-1)
试试这个,
Select u.Unit_name,pc.Postcode from Units as u
inner join UnitsMappings um on u.Unit_no = um.Unit_no
inner join Postcodes as pc on pc.Region_no = um.region_no