0

也许我找不到解决方案的原因是因为我不知道我真正在寻找什么!希望我能解释它足够的答案。我有 3 个表(1 个视图和 2 个表)。该视图包含我需要的所有详细信息,我们将其称为用户表。表 2 和表 3 包含用户的最后一次登录(2 个单独的系统)。我希望结果集显示视图中的每个用户,以及表 2 和 3 中每个用户的最后一次登录。我匹配员工 ID。我遇到的问题是表 2 和表 3 没有列出每个员工 ID,因为他们从未登录过。因此,如果我内部连接表 1 和 2,结果集不会显示视图中的所有用户,只显示匹配的用户。但是,我需要返回视图中的所有用户,如果用户从未登录(员工 ID 不在表 2 中),则将其留空或任何其他文本。

4

4 回答 4

1

不要使用INNER连接。改用OUTER联接

例如(表名和列名是虚构的..

SELECT 
  u.*, t1.logindate, t2.logindate
FROM 
  usertable u
LEFT OUTER JOIN table1 t1 ON u.id = t1.uid
LEFT OUTER JOIN table2 t2 ON u.id = t2.uid

引用文档

仅当两个表中至少有一行与连接条件匹配时,内部连接才返回行。内连接消除了与另一个表中的行不匹配的行。
然而,外部连接至少从 FROM 子句中提到的一个表或视图返回所有行,只要这些行满足任何 WHERE 或 HAVING 搜索条件。
所有行都从左外连接引用的左表中检索,右外连接引用右表中的所有行。两个表中的所有行都在完全外连接中返回。

于 2012-12-21T21:13:51.913 回答
0

您要查找的内容称为左外连接。

像这样的东西:

select u.*, s1.*, System2Login.*
from users u
  left outer join System1Login s1 on u.EmployeeID = s1.EmployeeID
  left outer join System2Login s2 on u.EmployeeID = s2.EmployeeID

应该返回表中的所有行,users以及来自 system1 和 system2 的数据(如果可用)。

于 2012-12-21T21:15:48.787 回答
0
SELECT <whatever columns you need>
FROM Table1 t1
LEFT OUTER JOIN Table2 t2
ON t1.employeeID = t2.employeeID
LEFT OUTER JOIN Table3 t3
ON t1.employeeID = t3.employeeID
于 2012-12-21T21:15:55.193 回答
0

您正在描述“外部连接”的作用。使用 a LEFT OUTER JOIN(或 RIGHT)而不是 an INNER JOIN,这样即使第二个表中没有匹配项,第一个表的结果也会出现。

请阅读此http://en.wikipedia.org/wiki/Join_(SQL)#Outer_joins

于 2012-12-21T21:17:09.813 回答