簡體   English   中英

oracle加入多個表

[英]oracle joining multiple tables

我有兩張桌子,一張看起來像這樣的桌子

Position(posNum, posTitle, posSalary)

樣本數據:

insert into position values ('P0009','Systems Engineers',5600);
insert into position values ('P0010','Senior Lecturer', 9000);
insert into position values ('P0011','Database Administrator',4500);

和另一張這樣的桌子

SKILL(skill,skillDesc)

樣本數據:

insert into skill values ('SK009','Database Optimization');
insert into skill values ('SK010','Oracle XE 11g');

由這樣的表引用

SKILLNEEDED(skillneededPosNum, skillneededSkill)

樣本數據:

insert into skillneeded values ('P0009','SK010',10);
insert into skillneeded values ('P0010','SK401',10);
insert into skillneeded values ('P0010','SK807',10);

在我的查詢中是否有任何錯誤,因為它沒有返回找到的行,但不應該是這種情況

SELECT p.posNum, p.posTitle, p.posOfferedBy
  FROM POSITION p
  JOIN SKILLNEEDED c
    ON p.posNum = c.skillneededPosNum
  JOIN SKILL s
    ON s.skill = c.skillneededSkill
 WHERE s.skillDesc = 'Oracle XE 11g' AND s.skillDesc = 'Database Design';

我想在你的WHERE子句中應該有一個OR而不是AND

您的初始查詢失敗,因為整個WHERE應用於每一行。 顯然, a=1 AND a=2並不是真的,因此您的查詢返回零行。

這個解決方案不一定是最優雅的,但我認為它說明了原則。 它使用WITH子句創建一個子查詢,該查詢可以在主查詢中多次引用。

with skillz as
   ( select p.posNum, s.skillDesc
     from SKILLNEEDED c
          join SKILL s
              ON s.skill = c.skillneededSkill
          join POSITION p
              ON p.posNum = c.skillneededPosNum )
select p.*
from POSITION p
     join skillz s1 
          on s1.posNum = p.posNum 
     join skillz s2 
          on s2.posNum = p.posNum 
WHERE s1.skillDesc = 'Oracle XE 11g' 
AND s2.skillDesc = 'Database Design';   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM