SQL-Query:Subtable中的EXISTS

Tim*_*ter 12 sql sql-server exists

我有两个表tabData和tabDataDetail.我想要来自Parent-Table(tabData)的所有idData(PK)只有 Child-Table中的行(tabDataDetail,FK是fiData):

  • fiActionCode = 11单独或
  • fiactionCode = 11和fiActionCode = 34

任何其他组合无效.怎么弄他们?

我没有成功的尝试(慢,并给我也只有 fiActioncode 34的行):

alt text http://www.bilder-hochladen.net/files/4709-l0.jpg

谢谢你的时间.


编辑:感谢所有人的回答.现在我很遗憾没有足够的时间来检查哪一个是最好的还是有效的.我将第一个工作标记为答案.

EDIT2:我认为明确的答案确实是最有效和最紧凑的解决方案.

编辑3:Codesleuth的答案很有趣,因为它只返回行而不是只有一个fiActionCode = 11.很难看到,因为它的唯一真正的20个tabDataDetail-rows总共41524189行有两个.无论如何,这不是我所要求的100%,而是我正在寻找的东西.

Tho*_*mas 5

Select ...
From tabData As T1
Where Exists    (
                Select 1
                From tabDataDetail As TDD1
                Where TDD1.fiData = T1.idData
                    And TDD1.fiactionCode = 11
                )
    And Not Exists    (
                      Select 1
                      From tabDataDetail As TDD1
                      Where TDD1.fiData = T1.idData
                          And TDD1.fiactionCode Not In(11,34)
                    )
Run Code Online (Sandbox Code Playgroud)

为了扩展我的逻辑,首先检查(更正)是为了确保存在fiActionCode = 11的行.第二项检查首先定义我们不想要的行集.除了fiActionCode = 11或34之外,我们不需要任何其他内容.因为这是我们不想要的项目集,所以我们搜索该集合中不存在的任何内容.