Oracle 8i 从具有相同 ID 但不同状态的多行数据集中选择查询

Posted

技术标签:

【中文标题】Oracle 8i 从具有相同 ID 但不同状态的多行数据集中选择查询【英文标题】:Oracle 8i select query from multi row dataset with same ID but different status 【发布时间】:2016-04-13 15:56:30 【问题描述】:

我一直在尝试编写正确的查询以获得正确的结果,但几个小时后仍然没有运气。我觉得我很接近了,但我的技巧用完了......

以这个屏幕截图为例:

突出显示的数据集是我正在寻找的。所以我有很多 SAMPLE_ID 但我希望所有行的状态都是“S”。您会看到未突出显示的数据集具有混合状态,包括“S”。现在我的问题是,我仍然得到那些......

这是我的查询:

SELECT T3.SAMPLE_ID FROM 
LIMSFD_SAMPLE_INFO T3
WHERE T3.SAMPLE_ID IN
(SELECT SAMPLE_ID FROM LIMS_FINAL_RESULT WHERE SECTION_ID = 'FD' AND STATUS = 'S' )
AND T3.SAMPLE_ID NOT IN
(SELECT SAMPLE_ID FROM LIMS_FINAL_RESULT WHERE SECTION_ID = 'FD' AND STATUS != 'S' )

所以第一个子查询以“S”状态获取结果,第二个子查询以“S”状态获取结果,并使用“IN”和“NOT IN”,我认为它会过滤掉不想要的结果。

现在,由于这是 Oracle 8i,我引入的子查询越多,它就越慢。我在这里尝试了这个,它使资源管理器崩溃:

SELECT T3.SAMPLE_ID FROM 
LIMSFD_SAMPLE_INFO T3, 
LIMSFD_SAMPLE_INFO T4
WHERE T3.SAMPLE_ID IN
(SELECT SAMPLE_ID FROM LIMS_FINAL_RESULT WHERE SECTION_ID = 'FD' AND STATUS = 'S' )
AND T4.SAMPLE_ID NOT IN
(SELECT SAMPLE_ID FROM LIMS_FINAL_RESULT WHERE SECTION_ID = 'FD' AND STATUS != 'S' )
AND T3.SAMPLE_ID <> T4.SAMPLE_ID

有人能指出我解决这个问题的方向吗? 因此,从上图中,我应该只得到突出显示的行,而没有其他行......在我的查询中,我得到了两者。

非常感谢!

【问题讨论】:

@halfer - 哈哈!抱歉,我没有大喊大叫,但这可能是出于对这个数据库的挫败感。我应该补充一点,我正在将所有内容迁移到 MariaDB,但这需要一些时间...... Oracle 8i - 认真吗? @WernfriedDomscheit - 你有什么有用的答案吗?大声笑 @WernfriedDomscheit 我们于 12 月 1 日迁移到 mysql,我非常高兴:D 【参考方案1】:

好的...我找到了答案!我不知道我以前怎么没有遇到过 MINUS 运算符。

所以我的新查询得到了我正在寻找的东西。这是更新后的查询:

select sample_id
from limsfd_sample_info
where sample_id in
(select sample_id from lims_final_result
where sample_type = 'OF' and analyte_code != 99 and section_id = 'FD' and status = 'S')
minus
select sample_id
from limsfd_sample_info
where sample_id in
(select sample_id from lims_final_result
where sample_type = 'OF' and analyte_code != 99 and section_id = 'FD' and status != 'S')

我希望这对将来的人有所帮助!如果您有 Oracle 8i 并希望迁移,请留意我会发布一个关于它的线程...它将使您的应用程序闪电般快速:D

我等不及了…………不!!!

【讨论】:

以上是关于Oracle 8i 从具有相同 ID 但不同状态的多行数据集中选择查询的主要内容,如果未能解决你的问题,请参考以下文章

Connect By 子句适用于 11g,但不适用于 Oracle 8i:“ORA-01436:用户数据中的 CONNECT BY 循环”

从 Clob 列中提取 XML 标记值,在 Oracle 中具有多个具有相同名称的标记

创建具有相同名称但不同签名的别名

两个 html 元素可以具有相同的 id 但属于不同的类吗?

Oracle 8i SQL 命令未正确结束

ConnectionManager.onChannelMessage() 接收到具有不同 connectionSerial 的消息,但消息 id 与上一个相同;丢弃