我有一个表,其中每一行都有一些字段,这些字段具有与其他表中的一些其他数据相关的 ID。
假设它叫做people
,每个人都有一个city
、state
和country
的ID .
所以会有另外三个表,cities
、states
和 countries
,每个表都有一个 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
关于sql - 在单个查询中从他们的 ID 获取相关数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/394771/