首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL WHERE..IN子句多列

SQL WHERE..IN子句多列
EN

Stack Overflow用户
提问于 2009-07-16 07:39:47
回答 11查看 597.8K关注 0票数 200

我需要在SQL Server中实现以下查询:

代码语言:javascript
复制
select *
from table1
WHERE  (CM_PLAN_ID,Individual_ID)
IN
(
 Select CM_PLAN_ID, Individual_ID
 From CRM_VCM_CURRENT_LEAD_STATUS
 Where Lead_Key = :_Lead_Key
)

但是WHERE..IN子句只允许1列。如何将2个或更多列与另一个内部选择进行比较?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-07-16 07:48:09

您可以从子查询创建一个派生表,并将table1联接到此派生表:

代码语言:javascript
复制
select * from table1 LEFT JOIN 
(
   Select CM_PLAN_ID, Individual_ID
   From CRM_VCM_CURRENT_LEAD_STATUS
   Where Lead_Key = :_Lead_Key
) table2
ON 
   table1.CM_PLAN_ID=table2.CM_PLAN_ID
   AND table1.Individual=table2.Individual
WHERE table2.CM_PLAN_ID IS NOT NULL
票数 127
EN

Stack Overflow用户

发布于 2009-07-16 07:46:42

您将希望改用WHERE EXISTS语法。

代码语言:javascript
复制
SELECT *
FROM table1
WHERE EXISTS (SELECT *
              FROM table2
              WHERE Lead_Key = @Lead_Key
                        AND table1.CM_PLAN_ID = table2.CM_PLAN_ID
                        AND table1.Individual_ID = table2.Individual_ID)
票数 137
EN

Stack Overflow用户

发布于 2009-07-16 08:15:29

简单的EXISTS子句是最干净的

代码语言:javascript
复制
select *
from table1 t1
WHERE
EXISTS
(
 Select * --or 1. No difference...
 From CRM_VCM_CURRENT_LEAD_STATUS Ex
 Where Lead_Key = :_Lead_Key
-- correlation here...
AND
t1.CM_PLAN_ID = Ex.CM_PLAN_ID AND t1.CM_PLAN_ID =  Ex.Individual_ID
)

如果在关联中有多个行,那么连接将在输出中提供多个行,因此需要distinct。这通常会使EXISTS更有效率。

注意:带有连接的SELECT *还将包括行限制表中的列

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1136380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档