我一直在尝试编写正确的查询以获得正确的结果,几小时后仍然没有运气。我觉得我很接近,但我没有诡计......
看看这个屏幕截图,例如:
突出显示的数据集是我正在寻找的。所以我有很多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
有人能指点我这个问题吗? 所以从上面的图片来看,我应该只获得突出显示的行,而不是其他任何行...在我的查询中,我得到了两者。
非常感谢!
答案 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 !!!