SQL 查询从多值列中提取数据,但前提是它满足特定条件

SQL query to pull data from multi-value column but only if it meets specific criteria

我有一个 table doc_source,其中包含 id、document_id 和 file_name。
file_name 包含各种文件类型,例如 *pdf、*dgn、*doc 等。我需要编写一个查询来提取所有包含 *pdf 文件且仅包含 *pdf 文件的文档。 换句话说,假设我有以下数据:

ID  DOCUMENT_Id FILE_NAME
1   100     abc.pdf
2   100     def.doc
3   200     ghi.pdf
4   300     jkl.pdf
5   300     mno.doc

我想提取所有只有 pdf 的文档。所以在这种情况下,我想要一个只提取 Doc Id 200 的查询,因为这是唯一一个只有 pdf 而没有其他文件类型的查询。

我试过这样做,但有些地方显然不太对:

WITH T1 AS (SELECT DOCUMENT_ID, FILE_NAME FROM DOC_SOURCE)
SELECT DOCUMENT_ID, FILE_NAME FROM DOC_SOURCE AS T2
WHERE FILE_NAME LIKE '%PDF'
GROUP BY DOCUMENT_ID, FILE_NAME
HAVING COUNT(DOCUMENT_ID) = (SELECT COUNT(DOCUMENT_ID) FROM T1)

我会使用 group byhaving:

select document
from t
group by document
having sum(case when file_name like '%.pdf' then 1 else 0 end) = count(*);

即每个文档以pdf结尾的文件名的个数等于文档总数。