加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL查询:Subtable中的EXISTS

发布时间:2020-12-12 16:56:26 所属栏目:MsSql教程 来源:网络整理
导读:我有两个表tabData和tabDataDetail. 我想要在Parent-Table(tabDataDetail,FK是fiData)中只有行的父表(tabData)中的所有idData(PK): fiActionCode = 11单独 要么 fiactionCode = 11和fiActionCode = 34 任何其他组合无效.如何获得他们? 我没有成功尝试(慢,给
我有两个表tabData和tabDataDetail.
我想要在Parent-Table(tabDataDetail,FK是fiData)中只有行的父表(tabData)中的所有idData(PK):

> fiActionCode = 11单独
要么
> fiactionCode = 11和fiActionCode = 34

任何其他组合无效.如何获得他们?

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

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

谢谢你的时间.

编辑:感谢所有的答案.现在我不幸没有足够的时间来检查哪一个是最好的或者是完美的.我把第一个工作作为答案.

EDIT2:我认为标示的答案是真正最有效和最紧凑的解决方案.

EDIT3:Codesleuth的答案很有趣,因为它只返回只有一个fiActionCode = 11的行.很难看到,因为它的唯一真正的20个tabDataDetail-rows ot的41524189总行有两个.无论如何,不??是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.因为这是我们不想要的一组项,我们搜索该集合中不存在的任何东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读