sql - 使用 IN 列表进行外部连接?

标签 sql sql-server

我想只使用一个项目列表来查找表中的命中和未命中,而不必创建一个新表来包含列表项目并且不使用任何脚本。我一整天都会做很多临时查询,所以这很有用。

这是我现在使用的示例:

SELECT custid, name, email  
FROM customers  
WHERE custid IN  
('1111', '2222', '3333', '4444')  

这将返回客户表中客户 ID 与我提供的列表中匹配的所有条目。

我想找到一种方法来返回像 OUTER JOIN 这样的结果,在那里我可以看到匹配项和未命中项。

仅供引用:我正在使用 MS SQL Server,但能够在 mySQL 中执行此操作也会很有用。谢谢!

最佳答案

有几种方法可以做到这一点。这里有两个:
SELECT C1.custid, name, email, C2.CustID As Match FROM customers As C1 left join (SELECT custid FROM customers
WHERE custid IN
('1111', '2222', '3333', '4444')) As C2 on C1.custid=C2.custid

如果它是其中一个数字,则匹配列中将有一个数字(4 个之一)。或者:
SELECT custid, name, email, Case When custid in ('1111', '2222', '3333', '4444') Then 'Match' Else '' End As IsMatch FROM customers
如果它是四个值之一,则 IsMatch 列将显示“匹配”。

第二个通常会更快。

关于sql - 使用 IN 列表进行外部连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2072688/

相关文章:

mysql - MySQL 中可以同时有超过 1 个 sql_mode 吗?

java - 替代查询以加入两个单独的查询

sql - 插入参数值和 JSON 字符串值

sql - 根据组内索引更新列

sql-server - Azure移动服务脚本保存经纬度的地理信息

sql - Binary_Checksum 与 HashBytes 函数

GROUP BY 子句中的 SQL Geography 数据类型列

mysql - 从mysql表中获取多个日期范围之间的所有日期

sql - 更新行 par lot SQL Server

mysql - 在 phpmyadmin 中查询更新但在网站中显示错误查询