在 WHERE 子句中使用 SELECT 查询

Posted

技术标签:

【中文标题】在 WHERE 子句中使用 SELECT 查询【英文标题】:To use SELECT query in WHERE clause 【发布时间】:2013-03-01 08:11:15 【问题描述】:

我想列出与 where 子句相关的表中的行,该子句需要比较两个表中的记录列表

SELECT DISTINCT (CONA.DOCUMENTID), CONA.CONTENTID 
FROM TABLEA AS CONA 
INNER JOIN TABLEB AS CTAGA ON CTAGA.CONTENTID = CONA.CONTENTID
WHERE CONA.DOCUMENTID LIKE 'PM%' 
AND (
  SELECT TAGID 
  FROM  TABLEB 
  WHERE CTAGA.CONTENTID = CONA.CONTENTID
) IN (SELECT TAGID FROM TABLEC)

在上面SELECT TAGID FROM TABLEB WHERE CTAGA.CONTENTID = CONA.CONTENTID会有

abc,def,ghi,jkl,mno

SELECT TAGID FROM TABLEC 将有 abc,def,ghi,jkl,mno,pqr,stu

是否可以检查列表A中的所有记录是否在列表B中

使用上面的我另外在表中的多个值

【问题讨论】:

【参考方案1】:

试试这个查询

SELECT DISTINCT (CONA.DOCUMENTID), CONA.CONTENTID 
FROM TABLEA AS CONA INNER JOIN TABLEB AS CTAGA ON CTAGA.CONTENTID = CONA.CONTENTID 
                      AND CTAGA.TAGID IN (SELECT TAGID FROM TABLEC)                    
WHERE CONA.DOCUMENTID LIKE 'PM%'

SELECT DISTINCT (CONA.DOCUMENTID), CONA.CONTENTID 
FROM TABLEA AS CONA INNER JOIN TABLEB AS CTAGA ON CTAGA.CONTENTID = CONA.CONTENTID                                          
WHERE CONA.DOCUMENTID LIKE 'PM%' AND EXISTS (
                                             SELECT 1 
                                             FROM TABLEC
                                             WHERE CTAGA.TAGID = TABLEC.TAGID
                                             )

【讨论】:

【参考方案2】:

试试这个

 SELECT DISTINCT (CONA.DOCUMENTID),TAGID FROM TABLEB As CTAGA
 Join TABLEC As CONA  On CTAGA.CONTENTID = CONA.CONTENTID
 Where CTGA.TAGID in (SELECT TAGID FROM TABLEC)
 AND CONA.DOCUMENTID LIKE 'PM%'

【讨论】:

以上是关于在 WHERE 子句中使用 SELECT 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何合并具有不同 WHERE 子句的两个 SELECT 查询

where 子句中使用的 SQL Server 查询性能视图

select 子句中的内联查询与 where 子句中的连接之间的差异 [重复]

在子查询中使用内联函数(在 WHERE 子句中)

Mysql在where子句中优化子查询

在SELECT语句中,对查询结果进行排序的子句是啥?能消除重复行的关键字是啥?