我怎样才能攻击这个mySQL查询?

时间:2016-03-22 02:47:45

标签: mysql sql sqlite

我需要结合两个表。

第一个表是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);

1 个答案:

答案 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);