MySql查询-自关联

  • 设计省信息的表结构provinces

    • id
    • ptitle
  • 设计市信息的表结构citys

    • id
    • ctitle
    • proid
  • citys表的proid表示城市所属的省,对应着provinces表的id值

问题:

能不能将两个表合成一张表呢?

思考:

观察两张表发现,citys表比provinces表多一个列proid,其它列的类型都是一样的

意义:

存储的都是地区信息,而且每种信息的数据量有限,没必要增加一个新表,或者将来还要存储区、乡镇信息,都增加新表的开销太大

答案:

定义表areas,结构如下

  • id
  • atitle
  • pid

说明:

  • 因为省没有所属的省份,所以可以填写为null
  • 城市所属的省份pid,填写省所对应的编号id
  • 这就是自关联,表中的某一列,关联了这个表中的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id
  • 在这个表中,结构不变,可以添加区县、乡镇街道、村社区等信息

创建areas表的语句如下:

create table areas(
    aid int primary key,
    atitle varchar(20),
    pid int
);

  • 从sql文件中导入数据
source areas.sql;

示例:
-- 自关联

    -- 查询所有省份
    select * from areas where pid = 1;

    -- 查询山东省有哪些市
    select id from areas where name = "山东省"; -- 查询id
    select * from areas where pid = 17;

     -- 查询山东省有哪些市 一步查询
     -- 一个表可以通过 as 重命名为两个表
    select province.name,city.name from areas as province inner join areas as city on province.id = city.pid having province.name="山东省";
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 自关联 设计省信息的表结构provincesidptitle 设计市信息的表结构citysidctitleproi...
    lyh165阅读 1,621评论 1 0
  • 自关联 设计省信息的表结构provinces 设计市信息的表结构citys citys表的proid表示城市所属的...
    杜大个阅读 9,867评论 0 2
  • 自关联 设计省信息的表结构provincesidptitle 设计市信息的表结构citysidctitleproi...
    菩灵阅读 1,166评论 0 0
  • 自关联:自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候...
    恬恬i阿萌妹O_o阅读 3,452评论 0 0
  • 研究生入学一周了,在这里的生活刚刚开始,这是自己在一年前梦寐以求的生活,当它真正地这样发生了,我内心的涟漪却早已回...
    辣酱就酱阅读 968评论 0 0

友情链接更多精彩内容