不等于(!=)未按预期运行

Ben*_*eno 1 sql oracle

首先,你看到这个代码有问题;

 SELECT num,
        surname, 
        firstname,
        ward 
   FROM doctor, ward WHERE num != consultant;

  NUM SURNAME    FIRSTNAME  W
---------- ---------- ---------- -
  203 Black      Peter      A
  574 Bisi       Mavis      B
  461 Boyne      Steve      B
  530 Clark      Nicola     C
  405 Mizzi      Nicola     A
  501 Mount      Mavis      A
  203 Black      Peter      A

  C NAME       CONSULTANT
  - ---------- ----------
  A Surgical          203
  B Paediatric        574
  C Medical           530
Run Code Online (Sandbox Code Playgroud)

我期待输出是这样的;

 461 Boyne      Steve      B
 405 Mizzi      Nicola     A
 501 Mount      Mavis      A
Run Code Online (Sandbox Code Playgroud)

会显示出不相等的结果,但是当我执行命令时,结果是这样的;

       NUM SURNAME    FIRSTNAME  W
---------- ---------- ---------- -
       574 Bisi       Mavis      B
       461 Boyne      Steve      B
       530 Clark      Nicola     C
       405 Mizzi      Nicola     A
       501 Mount      Mavis      A
       203 Black      Peter      A
       461 Boyne      Steve      B
       530 Clark      Nicola     C
       405 Mizzi      Nicola     A
       501 Mount      Mavis      A
       203 Black      Peter      A

       NUM SURNAME    FIRSTNAME  W
---------- ---------- ---------- -
       203 Black      Peter      A
       574 Bisi       Mavis      B
       461 Boyne      Steve      B
       405 Mizzi      Nicola     A
       501 Mount      Mavis      A
       203 Black      Peter      A
Run Code Online (Sandbox Code Playgroud)

我对Oracle很新鲜,所以这可能是一个noob错误,但任何帮助都会很棒.

Gor*_*off 5

你需要一个左外连接:

 SELECT num,surname, firstname,ward
 FROM doctor left outer join
      ward
      on num = consultant
 WHERE num is null;
Run Code Online (Sandbox Code Playgroud)

与您的查询的问题是,你正在做的之间的笛卡尔积(所有组合)doctorward.然后,您将选择两个值不同的行.

编写上述内容的另一种方法可能更清楚:

select d.*
from doctor d
where d.num not in (select consultant from ward);
Run Code Online (Sandbox Code Playgroud)