sql - 为多列组合所有表
问题描述
我有五张桌子,即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 行。只有countryStatus
5 行。其余的有 1k 行
解决方案
首先,用左连接替换你的内连接。您当前的 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
推荐阅读
- javascript - 反应useState不更新对象数组
- java - 如何获取给定字符串的文件大小?
- flutter - 发布失败(65')退出代码65
- python-3.x - Python 请求在下载二进制文件时工作非常缓慢
- c++ - STL 列表函数,从列表中删除第 N 个元素并将其替换为同一列表 C++ 中的第 M 个元素。必须使用重新链接
- r - 包 RODBC 不适用于 R 版本 3.5.1。如何创建 ODBC DSN?
- javascript - 在单独的 JS 文件中调用文档对象?
- python - Tkinter tkFileDialog 模块 - 仅限于一个文件夹
- mysql - 如何在不通过多次连接计算的情况下对值求和 - laravel 7
- swiftui - 更改深色和浅色模式的按钮样式