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

时间:2016-04-13 15:56:30

标签: oracle oracle8i

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

看看这个屏幕截图,例如:

Example

突出显示的数据集是我正在寻找的。所以我有很多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

有人能指点我这个问题吗? 所以从上面的图片来看,我应该只获得突出显示的行,而不是其他任何行...在我的查询中,我得到了两者。

非常感谢!

1 个答案:

答案 0 :(得分:0)

好的......我找到了答案!我以前不知道我之前没有遇到过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

我等不及................... NOT !!!