2017-08-16 31 views
1

如果此问题格式不正确,我很抱歉,通常我不会问SQL问题。我的oracle数据库Oracle SQL Query帮助查找列有两个可能值的条目

SELECT * FROM X_METER_USE x 
LEFT JOIN INSTRUMENTS i on x.ID_NUMBER = i.NAME and x.INST_SNR = 'INSTRUMENT' 
LEFT JOIN STANDARD_REAGENT sr ON x.ID_NUMBER = sr.SAMPLE_NUMBER AND x.INST_SNR = 'SNR' 
WHERE x.INST_SNR = 'SNR' AND sr.SAMPLE_NUMBER = i.NAME; 

高水平的想法是,在这个X_METER_USE表条目对应于我的组织测试工程师在项目进行的,我有以下查询创建。他们使用INSTRUMENT表中的测量仪器或STANDARD_REAGENT表中的化学物质进行测试。在X_METER_USE条目中,如果INST_SNR列的值为“INSTRUMENT”,则他们使用仪器执行测试,如果值为“SNR”,则他们使用化学品执行测试。每个X_METER_USE条目与存储在名为PROJECT的列中的项目编号相关联。这里的关系是一个项目可以有许多与之相关的X_METER_USE条目。所以PROJECT列有重复的条目对应于在该项目上执行的所有测试。

下面是表:

enter image description here

这里有一些例子,条目

enter image description here

我需要一个查询找几个项目数量的工程师已经进入测试用这两种化学品和仪器,所以我可以测试一个前端Web界面,并确保我的逻辑是正确的。提前致谢!

回答

2

我会用intersect作为最简单的方法来检查你想

select * from X_METER_USE 
where project in (
    SELECT x.project FROM X_METER_USE x 
    INNER JOIN INSTRUMENTS i on x.ID_NUMBER = i.NAME 
    where x.INST_SNR = 'INSTRUMENT' 
    INTERSECT 
    SELECT x.project FROM X_METER_USE x 
    INNER JOIN STANDARD_REAGENT sr ON x.ID_NUMBER = sr.SAMPLE_NUMBER 
    where x.INST_SNR = 'SNR' 
) 
+0

工作完美,谢谢! – pdaniels0013

2

如果我理解正确的话,你想找到同时具有化学测试和仪器测试项目是什么。

为了做到这一点,我相信你会做:

(SELECT DISTINCT PROJECT FROM X_METER_USE WHERE INST_SNR = "INSTRUMENT") AS X 
JOIN (SELECT DISTINCT PROJECT FROM X_METER_USE WHERE INST_SNR = "SNR") AS Y 
ON X.PROJECT = Y.PROJECT 

得到一个表包含那些由两种方法测试项目的一个字段(项目)。然后,您可以将它加入到您的项目表中,以便在必要时获取有关该项目的完整信息(尽管只是您不需要的数字)。 (一般情况下只需要左或右连接,如果一边的条目可能不匹配另一边的条目,并且您想要这些条目;这里,您不希望未经测试的项目或不需要的测试有有效的项目条目,所以你想要一个内部联接。)

+0

所以你的逻辑似乎是正确的,但是当我尝试运行脚本时出现错误在Oracle SQL开发人员和我的datagrip IDE中,第一个“AS”出现语法错误, – pdaniels0013