sql – 在单个查询中从ID获取相关数据的最佳方法是什么?

我有一个表,其中每一行都有几个字段,其ID与其他一些表中的其他数据相关.

让我们说它叫人,每个人都有城市,州和国家的ID.

因此,将有三个表,城市,州和国家/地区,每个表都有ID和名称.

当我选择一个人时,在一个查询中获取城市,州和国家名称的最简单方法是什么?

注意:我知道连接可以实现这一点,但是由于存在更多相关表,嵌套连接会使查询难以阅读,我想知道是否有更简洁的方法.该人也应该可以将这些字段清空.

解决方法:

假设以下表格:

create table People
(
     ID        int          not null primary key auto_increment
    ,FullName  varchar(255) not null
    ,StateID   int 
    ,CountryID int 
    ,CityID    int 
)
;
create table States
(
     ID   int          not null primary key auto_increment
    ,Name varchar(255) not null
)
;
create table Countries
(
     ID   int          not null primary key auto_increment
    ,Name varchar(255) not null
)
;
create table Cities
(
     ID   int          not null primary key auto_increment
    ,Name varchar(255) not null
)
;

使用以下数据:

insert into Cities(Name) values ('City 1'),('City 2'),('City 3');
insert into States(Name) values ('State 1'),('State 2'),('State 3');
insert into Countries(Name) values ('Country 1'),('Country 2'),('Country 3');
insert into People(FullName,CityID,StateID,CountryID) values ('Has Nothing'   ,null,null,null);
insert into People(FullName,CityID,StateID,CountryID) values ('Has City'      ,   1,null,null);
insert into People(FullName,CityID,StateID,CountryID) values ('Has State'     ,null,   2,null);
insert into People(FullName,CityID,StateID,CountryID) values ('Has Country'   ,null,null,   3);
insert into People(FullName,CityID,StateID,CountryID) values ('Has Everything',   3,   2,   1);

然后这个查询应该给你你想要的东西.

select 
 P.ID
,P.FullName
,Ci.Name as CityName
,St.Name as StateName
,Co.Name as CountryName
from People P
left Join Cities    Ci on Ci.ID = P.CityID
left Join States    St on St.ID = P.StateID
left Join Countries Co on Co.ID = P.CountryID
上一篇:Django中的Object Relational Mapping(ORM)


下一篇:flutter-保持页面的效果