SQL-选择记录集不包含值的位置
我不确定标题是否准确地反映了我正在寻找的内容 我有一个标题表和一个行表。对于每个标题,可以有多行记录 如果lines表不包含标题记录的行值,我想返回该标题记录 示例: 标题表-SQL-选择记录集不包含值的位置,sql,sql-server,tsql,Sql,Sql Server,Tsql,我不确定标题是否准确地反映了我正在寻找的内容 我有一个标题表和一个行表。对于每个标题,可以有多行记录 如果lines表不包含标题记录的行值,我想返回该标题记录 示例: 标题表- | ID | xyz...| | 1 | abc | | 2 | abc | 行表- | LineID | HeaderID | xyz...| | 1 | 1 | abc | | 2 | 1 | abc | | 3 | 1 |
| 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 |
在本例中,如果搜索不包含行ID为1或2的记录,我希望返回标题记录2
我想不起对我生命的质疑,即使我知道它正盯着我的脸
当我想到要尝试的查询时,我会发布它们来显示我的工作方式,但我希望有人能对此给出答案。一个简单的
不存在的就可以了:
SELECT *
FROM Header h
WHERE NOT EXISTS(
SELECT 1
FROM Lines l
WHERE
l.HeaderID = h.ID
AND l.LineID IN(1, 2)
)
一个简单的不存在
就可以了:
SELECT *
FROM Header h
WHERE NOT EXISTS(
SELECT 1
FROM Lines l
WHERE
l.HeaderID = h.ID
AND l.LineID IN(1, 2)
)
查询:
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
查询:
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
太好了,谢谢+1对于一个简单简洁的查询,我认为它会比这复杂得多。我必须承认,我的最后一次尝试是到达那里,我只是没有想到添加'AND l.LineID',而是选择了ID,而不是'1'。出于好奇,为什么它是“选择1”?@deekay90,中的选择
列不存在
没有被正确评估。您可以将其替换为1/0
,它仍然不会出错。非常好,谢谢+1对于一个简单简洁的查询,我认为它会比这复杂得多。我必须承认,我的最后一次尝试是到达那里,我只是没有想到添加'AND l.LineID',而是选择了ID,而不是'1'。出于好奇,为什么它是“选择1”?@deekay90,中的选择
列不存在
没有被正确评估。您可以将其替换为1/0
,它仍然不会出错。我对此进行了改进,因为我喜欢知道实现任务的多种方法,很好!谢谢我之所以把这一点提高了,是因为我喜欢知道实现一项任务的多种方法,很好!谢谢