无法弄清楚如何列出所有不住在同一城市的人

时间:2010-04-23 20:04:37

标签: sql

我想列出与位置表中列出的城市不在同一城市的所有人(人员表)。因此,如果Location表包含City=’New York’State=’Moon’的记录,但Person表包含FirstName=’Someone’City=’New York’Location=’Mars’的记录,那么有人列在结果集中,因为她住在位于火星上的纽约而不是位于Moon的纽约,因此我们谈论的是同名的不同城市。我尝试使用以下查询解决它,但结果是错误的:

SELECT Person.FirstName, Person.LastName,
Person.City, Person.State
FROM Person INNER JOIN Location
ON (Person.City <> Location.City AND Person.State = Location.State)
OR (Person.City = Location.City AND Person.State <> Location.State)
OR (Person.City <> Location.City AND Person.State <> Location.State)
ORDER BY Person.LastName;

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

使用left join

SELECT Person.FirstName, Person.LastName, Person.City, Person.State
FROM Person LEFT JOIN Location
ON (Person.City = Location.City AND Person.State = Location.State)
WHERE Location.City IS NULL
ORDER BY Person.LastName

左连接包括“左”表(Person)中的所有行,即使“右”表(位置)中没有匹配项也是如此。如果没有匹配项,则右表的列将设置为NULL。

在此查询中,WHERE条件将返回的行限制为没有匹配的行。

答案 1 :(得分:1)

试试这个:

SELECT Person.FirstName, Person.LastName, Person.City, Person.State
    FROM Person INNER JOIN Location
    ON (Person.City = Location.City AND Person.State <> Location.State)
    ORDER BY Person.LastName;

此查询查找位于城市中位置表中具有匹配城市但状态不同的所有人。如果您要查找没有匹配位置的人,请看Ayman's answer

答案 2 :(得分:1)

你的意思是

选择person.fn,person.ln,person.city,person.st 从人,位置 人员不在的地方 (从location.st!= person.st的位置选择location.city)

答案 3 :(得分:1)

您应该在两个表上执行左外连接,然后选择位置为空的

类似

从人物中选择* 左外连接位置 在p.city = l.city和p.state = l.state上 其中l.id为空