2017-11-27 16 views
0

私はSQLに新たなんだと、私は次のような問題があります。自然は、クエリに参加 - SQL(PostgreSQLの)

従業員(イード、ENAME、給与)

プロジェクト(:HRから を考えると、以下の関係をPID、PNAME、requiredWorkers)

WorksOn(イード、PID)

私は、彼らが動作しているすべてのプロジェクトが正確に同じ名前を持っている従業員のEIDSを返すようにするには(いくつかのプロジェクトが持っている可能性があるという事実を与えられました同じ名前だが違いはあるnt Pids)。私は、少なくとも1つのプロジェクトで働く従業員だけを返したいと思います。

私はこれをしようとしている:成功せず

SELECT DISTINCT t1.Eid 
FROM (Employee NATURAL JOIN WorksOn NATURAL JOIN Project) AS t1, (Employee NATURAL JOIN WorksOn NATURAL JOIN Project) AS t2 
EXCEPT 
SELECT DISTINCT t1.Eid 
FROM (Employee NATURAL JOIN WorksOn NATURAL JOIN Project) AS t1, (Employee NATURAL JOIN WorksOn NATURAL JOIN Project) AS t2 
WHERE t1.Pname <> t2.Pname 
ORDER BY t1.Eid ASC 

。私が試したすべてが私に違うエラーを与えます。

どうすればいいですか?

ありがとうございます。

+0

EXCEPTは設定された操作なので、2つのクエリで 'DISTINCT'は必要ありません。 – Magnus

答えて

1
select e.Eid, e.Ename 
from 
    Employee e 
    inner join 
    WorksOn using (Eid) 
    inner join 
    Project p using (Pid) 
group by 1, 2 
having count(distinct p.Pname) = 1 
関連する問題