首先,你看到这个代码有问题;
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错误,但任何帮助都会很棒.
你需要一个左外连接:
SELECT num,surname, firstname,ward
FROM doctor left outer join
ward
on num = consultant
WHERE num is null;
Run Code Online (Sandbox Code Playgroud)
与您的查询的问题是,你正在做的之间的笛卡尔积(所有组合)doctor和ward.然后,您将选择两个值不同的行.
编写上述内容的另一种方法可能更清楚:
select d.*
from doctor d
where d.num not in (select consultant from ward);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |