[英]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.