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 by
和 having
:
select document
from t
group by document
having sum(case when file_name like '%.pdf' then 1 else 0 end) = count(*);
即每个文档以pdf结尾的文件名的个数等于文档总数。
我有一个 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 by
和 having
:
select document
from t
group by document
having sum(case when file_name like '%.pdf' then 1 else 0 end) = count(*);
即每个文档以pdf结尾的文件名的个数等于文档总数。