1

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

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

例子

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

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

非常感谢!

4

1 回答 1

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

我等不及了............不!

于 2016-04-13T18:53:27.700 回答