2017-03-24 20 views
0

我有這些表SQL。如何在另一個表中顯示缺少的行?

create table Employee2 
( 
    eid char(3), 
    ename char(10), 
    salary number(7,2), 
    mid char(3), 

    primary key (eid), 
    foreign key (mid) references Employee2 
); 

create table ArtObject2 
(
    aoid char(3), 
    atitle char(12), 
    artist varchar(10), 
    pricea number(8,2), 

    primarykey (aoid) 
); 

create table MakesD2 
(
    aoid char(3), 
    eid char(3), 
    cid char(3), 
    prices number, 
    dates date, 

    primary key (aoid, CID), 
    foreign key (aoid) references ArtObject2, 
    foreign key (CID) references Customer2, 
    foreign key (eid) references Employee2 
); 

這是一些示例數據:http://imgur.com/a/ZapJy

我試圖找出誰沒有與要價超過50萬賣出一幅畫的員工。

這裏是我迄今爲止

SELECT DISTINCT e.ename 
FROM Employee2 e 
INNER JOIN MakesD2 md on md.eid = e.eid 
INNER JOIN ArtObject2 a on a.aoid = md.aoid 
WHERE NOT EXISTS (SELECT md.prices 
        FROM MakesD2 
        WHERE a.pricea < 500000); 

應該得到這些值

Wilson 
Loftus 
Smith 
Fox 
Wolf 
Fox 
Liy 
+0

是否已經解決,請不要刪除你的問題。你接受一個答案,那** **標記這個問題進行解決 –

回答

0

我用NOT IN

SELECT e.ename 
FROM Employee2 e 
WHERE e.eid NOT IN (SELECT md.eid 
        FROM MakesD2 md 
        INNER JOIN ArtObject2 a 
         ON a.aoid = md.aoid 
        WHERE a.pricea > 500000); 
0

你是接近!

對於要移動的加入到exists()子查詢,並檢查對eid從主查詢子查詢裏面的eid[not] exists();並將a.pricea<500000更改爲a.pricea>500000,因爲這是not exists()

select e.ename 
from Employee2 e 
where not exists (
    select 1 
    from MakesD2 md 
    inner join ArtObject2 a 
     on a.aoid = md.aoid 
    where a.pricea > 500000 
    and e.eid = md.eid 
); 
+0

我得到這些值威爾遜 瓊斯 洛夫特斯 王 綠色 福克斯 劉然而瓊斯,王和綠色超過50萬賣出一幅畫有要價 –

相關問題