我有两个表 tabData 和 tabDataDetail。 我想要来自 Parent-Table(tabData) 的所有 idData(PK) 在 Child-Table(tabDataDetail, FK is fiData) 中仅行:
- fiActionCode=11 单独 或
- fiactionCode=11 和 fiActionCode=34
任何其他组合均无效。如何获得它们?
我尝试过但没有成功(速度慢并且还给我提供了仅 fiActioncode 34 的行):
(来源:bilder-hochladen.net)
感谢您的宝贵时间。
<小时/>编辑:感谢大家的回答。不幸的是,现在我没有足够的时间来检查哪一个最好或根本有效。我将第一个工作标记为答案。
EDIT2:我认为标记的答案确实是最有效和紧凑的解决方案。
EDIT3:Codesleuth 的答案很有趣,因为它只返回只有一个 fiActionCode=11 的行。很难看出,因为只有 41524189 个 tabDataDetail 行中的 20 个 tabDataDetail 行(有两个)才是正确的。不管怎样,这并不是 100% 我所问的,或者更确切地说,我正在寻找的。p>
最佳答案
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)
)
为了扩展我的逻辑,第一个检查(更正)是确保存在 fiActionCode = 11 的行。第二次检查的工作方式是首先定义我们不需要的行集。我们不需要 fiActionCode = 11 或 34 以外的任何内容。因为这是我们不想要的项目集,所以我们搜索该集中不存在的任何内容。
关于SQL 查询 : EXISTS in Subtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3459605/