我想列出与位置表中列出的城市不在同一城市的所有人(人员表)。因此,如果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;
有什么想法吗?
答案 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为空