从 SQL 查询中排除记录

Geo*_*wdy 0 sql-server t-sql sql-server-2017

我有一个表,我试图只返回 rendition_type Interactive 的记录,而没有其他关联的 rendition_type。如果一个记录有多个 rendition_type,我需要将它从列表中排除。

DOC_ID    RENDITION_ID    RENDITION_TYPE
001       001             Interactive
001       002             Web PDF
002       003             Interactive
003       004             Interactive
003       005             Print PDF
004       006             Interactive
005       007             Interactive
005       008             Web PDF
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个查询,该查询将仅返回 document_ID 的 Rendition_type 类型仅为 1 且该类型为 Interactive 的行。

Sco*_*red 6

这似乎给了你你想要的。

--demo setup
DROP TABLE IF EXISTS DocumentTable;
go
CREATE TABLE DocumentTable
    (DOC_ID int, RENDITION_ID int, RENDITION_TYPE varchar(11))
;

INSERT INTO DocumentTable
    (DOC_ID, RENDITION_ID, RENDITION_TYPE)
VALUES
    (001, 001, 'Interactive'),
    (001, 002, 'Web PDF'),
    (002, 003, 'Interactive'),
    (003, 004, 'Interactive'),
    (003, 005, 'Print PDF'),
    (004, 006, 'Interactive'),
    (005, 007, 'Interactive'),
    (005, 008, 'Web PDF')
;

--solution
SELECT *
FROM DocumentTable a
WHERE RENDITION_TYPE = 'Interactive'
    AND NOT EXISTS (
        SELECT *
        FROM DocumentTable
        WHERE DOC_ID = a.doc_id
            AND RENDITION_TYPE <> 'Interactive'
        )
Run Code Online (Sandbox Code Playgroud)
| DOC_ID | RENDITION_ID | RENDITION_TYPE |
|--------|--------------|----------------|
| 2      | 3            | Interactive    |
| 4      | 6            | Interactive    |
Run Code Online (Sandbox Code Playgroud)