SQL 查询 : EXISTS in Subtable

标签 sql sql-server exists

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

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

任何其他组合均无效。如何获得它们?

我尝试过但没有成功(速度慢并且还给我提供了 fiActioncode 34 的行):

alt text
(来源:bilder-hochladen.net)

感谢您的宝贵时间。

<小时/>

编辑:感谢大家的回答。不幸的是,现在我没有足够的时间来检查哪一个最好或根本有效。我将第一个工作标记为答案。

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

EDIT3:Codesleuth 的答案很有趣,因为它只返回只有一个 fiActionCode=11 的行。很难看出,因为只有 41524189 个 tabDataDetail 行中的 20 个 tabDataDetail 行(有两个)才是正确的。不管怎样,这并不是 100% 我所问的,或者更确切地说,我正在寻找的。

最佳答案

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/

相关文章:

sql - 何时使用 View 而不是表?

php - SQL 中存储标签、类别和 int[] 的最佳方式

php - IF EXISTS UPDATE ELSE INSERT 语法错误

MySQL IF EXISTS UPDATE ELSE INSERT - 完整 SQL 示例(不重复)

sql - 如果存在问题,Oracle sql 返回 true

sql - 表 A 引用表 B,我如何插入(使用 Perl 和 DBI 以及 PostgreSQL)

sql - 强制 mysql 在 bit_or 上不返回结果

python - 使用 python 将字节插入 Postgres 会出错,但是使用 PG SQL 控制台可以

sql - 如何将值作为不同的列插入?

sql-server - 如何在 SQL Server 查询中排除周末和节假日