在 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 查询性能视图