首页 > 解决方案 > 为多列组合所有表

问题描述

我有五张桌子,即countryCities, countryProvinces, countryRegions, countryStatus,countryRestrictions

我需要结合给定每个列的所有表。这是目前我想出的:

select cc.id, cc.name, cc.is_city, cp .id, cp.name, cp.key, cr.id, cr.name, cr.long_name, cr .key,
cs.id, cs.id, cs.status, cr.start, cr.end, cr.travelAllowed
from countryCities as cc
inner join countryProvinces cp ON cc.id=cp.id
inner join countryRegions cr ON cp.id=cr.id
inner join countryStatus cs ON cp.id=cr.id
inner join countryRestrictions cr ON cp.id=cr.id

我不确定我是否真的合并了,因为我的行已减少到大约一百行。每个表应该总共有 1k 行。只有countryStatus5 行。其余的有 1k 行

标签: sql

解决方案


首先,用左连接替换你的内连接。您当前的 sql 查询不会返回没有以下任何一项的城市:省、地区、状态或限制。这是JOINS的解释。

第二,你们所有的省份都有城市吗?你们所有的地区都有省吗?如果答案是“否”/我不确定,那么您需要使用从省和地区开始的查询进行 UNION,与城市相关的字段为 null 或默认值。这是一个省的例子:

select NULL, NULL, NULL, cp .id, cp.name, cp.key, cr.id, 
cr.name, cr.long_name, cr .key,
cs.id, cs.id, cs.status, cr.start, cr.end, cr.travelAllowed
from countryProvinces as cp
inner join countryRegions cr ON cp.id=cr.id
inner join countryStatus cs ON cp.id=cs.id
inner join countryRestrictions cre ON cp.id=cre.id

推荐阅读