我有两个表:
Users Messages
--------- ---------
[ FirstName ] [ FirstName ]
[ LastName ] [ LastName ]
[ SSN ] [ SSN ]
[ Message ]
我有以下查询Microsoft SQL:
SELECT
t2.FirstName,
t2.LastName,
t2.SSN
FROM
[Messages] as t1
JOIN
[User] as t2
ON
t1.SSN = t2.SSN
它给我的是存在于两个表上的结果。我需要做的只是从消息表拉记录,如果他们的SSN不存在于用户表。我知道还有第二步可走,但我想不出来。
更新:实际上它仍然不工作。我在数据库中绝对没有NULL(s)。所有记录都用数据填充。我需要的是在Users表中不存在的Messages表中的所有记录。
的例子:
Users [ 1 John Smith 111-11-1111 ]
Users [ 2 Jim Tompson 999-99-9999 ]
Messages [ 1 John Smith 111-11-1111 ]
Messages [ 2 Jim Tompson 999-99-9999 ]
Messages [ 3 Angelina Jolie 888-88-8888 ]
结果将是: [ 3 Angelina Jolie 888-88-8888 ]
SELECT *
FROM messages m
WHERE NOT EXISTS
(
SELECT NULL
FROM users u
WHERE u.ssn = m.ssn
)
- T1代替T2在选择。您需要来自消息的记录,而不是来自用户的记录。当我们得到列表时,你想要的是数据,而不是空值:D
- Join需要是一个外部连接(返回消息中的所有记录,并且只有那些在用户中匹配的记录,因为表的顺序是消息然后是用户,左连接将工作)
- 最后,既然你知道T2。当没有找到匹配项时,SSN将为空,对其进行过滤。因此,只返回在用户中找不到SSN的消息。
.
SELECT
t1.FirstName,
t1.LastName,
t1.SSN
FROM
[Messages] as t1
LEFT JOIN
[User] as t2
ON
t1.SSN = t2.SSN
WHERE
T2.ssn is null
试试这个:
SELECT
t2.FirstName,
t2.LastName,
t2.SSN
FROM
[Messages] t2
WHERE
t2.SSN
NOT IN
(
SELECT DISTINCT
SSN
FROM
[Users]
)