kub*_*lay 55 sql t-sql sql-server
我有一个电子邮件地址列表,其中一些在我的表中,其中一些不在.我想从该列表中选择所有电子邮件,以及它们是否在表中.
我可以让那些邮件地址在桌子上的用户像这样:
SELECT u.* FROM USERS u WHERE u.EMAIL IN ('email1', 'email2', 'email3')
但是如何在该列表中选择表中不存在的值?
而且,我该怎么选择这样:
E-Mail | Status
email1 | Exist
email2 | Exist
email3 | Not Exist
email4 | Exist
Run Code Online (Sandbox Code Playgroud)
提前致谢.
Mar*_*ith 83
对于SQL Server 2008
SELECT email,
CASE
WHEN EXISTS(SELECT *
FROM Users U
WHERE E.email = U.email) THEN 'Exist'
ELSE 'Not Exist'
END AS [Status]
FROM (VALUES('email1'),
('email2'),
('email3'),
('email4')) E(email)
Run Code Online (Sandbox Code Playgroud)
对于以前的版本,您可以使用派生表执行类似UNION ALL的操作 - 常量.
/*The SELECT list is the same as previously*/
FROM (
SELECT 'email1' UNION ALL
SELECT 'email2' UNION ALL
SELECT 'email3' UNION ALL
SELECT 'email4'
) E(email)
Run Code Online (Sandbox Code Playgroud)
您需要以某种方式创建一个包含这些值的表,然后使用NOT IN.这可以使用临时表,CTE(公用表表达式)或表值构造函数(在SQL-Server 2008中提供)来完成:
SELECT email
FROM
( VALUES
('email1')
, ('email2')
, ('email3')
) AS Checking (email)
WHERE email NOT IN
( SELECT email
FROM Users
)
Run Code Online (Sandbox Code Playgroud)
可以使用LEFT JOIN或EXISTS子查询找到第二个结果:
SELECT email
, CASE WHEN EXISTS ( SELECT *
FROM Users u
WHERE u.email = Checking.email
)
THEN 'Exists'
ELSE 'Not exists'
END AS status
FROM
( VALUES
('email1')
, ('email2')
, ('email3')
) AS Checking (email)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122874 次 |
| 最近记录: |