SQL - 选择记录集不包含值

时间:2016-04-29 05:20:25

标签: sql sql-server tsql

我不确定标题是否反映了我正在搜索的内容。

我有一个标题表和一个行表。对于每个标题,可以有多个行记录。

如果行表不包含标题记录的行值,我想返回该标题记录。

示例:

标题表 -

| ID | xyz...|
|  1 |  abc  |
|  2 |  abc  |

行表 -

| LineID | HeaderID | xyz...|
| 1      |    1     | abc   |
| 2      |    1     | abc   |
| 3      |    1     | abc   |
| 3      |    2     | abc   |
| 4      |    2     | abc   |
| 5      |    2     | abc   |

在这种情况下,如果我搜索的行记录不包含1或2行的记录,我希望返回标题记录2.

我无法想到对我生活的质疑,即使我知道它直接盯着我。

当我想到要尝试的查询时,我会发布它们以显示我的工作,但我希望有人能够得到答案。

2 个答案:

答案 0 :(得分:3)

一个简单的NOT EXISTS可以解决问题:

SELECT *
FROM Header h
WHERE NOT EXISTS(
    SELECT 1
    FROM Lines l
    WHERE
        l.HeaderID = h.ID
        AND l.LineID IN(1, 2)
)

ONLINE DEMO

答案 1 :(得分:1)

查询: 的 LINK

SELECT h.*
FROM Header h
LEFT JOIN Lines l
  ON l.HeaderID = h.ID
  AND l.LineID IN(1, 2)
WHERE l.HeaderID is null