Oracle SQL:一查询两张表

问题描述 投票:0回答:1

我有以下基本查询:

SELECT INIT,TIDSPUNKT,AKTIVITETSTYPE 
   FROM ExampleDB.SAFE_DATA_VP_KR 
   WHERE DATO = '2020-05-25' AND
         AKTIVITETSTYPE = 'Udg¿ende/Produktion' AND
         INIT IN (SELECT initialer
                    FROM ExampleDB.SAFE_DATA_MEDARBEJDER
                    WHERE STATUS IN (1) AND
                          MED_STEDKODE_ID IN (5530) AND
                          ROLE_ID NOT IN (4)) 
   ORDER BY INIT, TIDSPUNKT;

我想修改它并添加一个ACTIVITY_ID!= 53,如下所示,但它不起作用。

SELECT INIT, TIDSPUNKT,AKTIVITETSTYPE 
  FROM ExampleDB.SAFE_DATA_VP_KR 
  WHERE DATO = '2020-05-25' 
  AND AKTIVITETSTYPE = 'Udg¿ende/Produktion' AND
      INIT IN (SELECT initialer 
                 FROM ExampleDB.SAFE_DATA_MEDARBEJDER 
                 WHERE STATUS IN (1) AND
                       MED_STEDKODE_ID IN (5530) AND
                       ROLE_ID NOT IN (4)) AND
      INIT IN (SELECT initialer 
                 FROM ExampleDB.SAFE_DATA_VAGTPLAN 
                 WHERE AKTIVITET_ID != 53) 
  ORDER BY INIT, TIDSPUNKT;
sql oracle
1个回答
1
投票
大概,您希望NOT IN过滤掉具有53活动的任何init值:

and init not in (Select initialer from ExampleDB.SAFE_DATA_VAGTPLAN where AKTIVITET_ID = 53 )

注意:我强烈不建议在子查询中使用NOT IN,因为它们不能正确处理NULL值。您应该使用NOT EXISTS重写它-在为表引用提供适当的别名并限定所有列引用之后。
© www.soinside.com 2019 - 2024. All rights reserved.