我需要结合两个表。
第一个表是People(SSN PRIMARY KEY,fname,lname)。
另一个表是Cities(name,cityID),其中name =" fname lname"即2列人与其间的空格连接。一个人可能有多个城市与他们相关联,一个城市可能有一个以上的人(许多人)。
我想将两者合并为一个表PeopleCities(SSN,cityID)。如果找不到某个城市的人,我需要该城市ID的SSN为0。我的经验主要是使用sqlite而不是mySQL,所以我对查询不太自信。
这是我的问题:
SELECT ISNULL(People.SSN, 0), Cities.cityID
FROM People
FULL OUTER JOIN Cities
ON (Cities.name = CONCAT_WS(" ", People.fname, " ", People.lname) FROM People);
答案 0 :(得分:1)
您可以先使用UNION ALL
来获取匹配的人/城对,然后获取不匹配的内容:
select p.ssn, coalesce(c.cityid, 0)
from people p left join
cities c
on c.name = concat_ws(' ', p.name, p.lname)
union all
select distinct 0, c.cityid
from cities c
where not exists (select 1 from people p where c.name = concat_ws(' ', p.name, p.lname);