3

GLC従業員がタスクに取り組んでいるが、従業員がタスクに取り組んでいない顧客の名前とプロジェクトのタイトルをリストする必要がありCACます。**

私は次のことを試しましたが、空のセットを取得しました:

select 
   c.custname, p.pjtitle
from 
   (select taskno pjno
    from task 
    where taskno not in
                 (select taskno
                  from task
                  where empid = 'CAC')
    and empid = 'GLC') t
join project p on p.pjno = t.pjno
join customer c on p.custno = c.custno;

どのように使用すればよいjoinですsubqueryか?

4

5 に答える 5

4
SELECT c.custname, p.pjtitle
  FROM customer c
  JOIN project p ON p.custno = c.custno
  JOIN task t ON p.pjno=t.pjno
 WHERE t.empid='GLC'
   AND NOT EXISTS (SELECT NULL FROM task t1 WHERE t.pjno=t1.pjno AND t1.empid='CAC')
;
于 2013-06-15T06:26:26.270 に答える
2

顧客名とプロジェクト名が必要な場合は、おそらく重複したくないでしょう。これは、set-within-sets サブクエリの例です。最善の解決策は集計を使用することだと思います。集計を使用すると、条件を最も柔軟に記述できるからです。

SELECT c.custname, p.pjtitle 
FROM customer c join
     project P
     ON P.CUSTNO = P.CUSTNO join
     task t ON t.pjno = p.pjno
group by c.custname, p.pjtitle 
having sum(case when empid = 'GLC' > 0 then 1 else 0 end) > 0 and
       sum(case when empid = 'CAC' > 0 then 1 else 0 end) = 0

having 節の 2 つの部分は、各従業員が特定のプロジェクトに取り組んだ回数を数えています。1 つ目は「GLC が少なくとも 1 つのタスクで作業していることを確認してください」と言い、2 つ目は「CAC がどのタスクでも作業していないことを確認してください」と言っています。

于 2013-06-15T07:06:34.347 に答える
0

GLC 従業員のみの顧客名とプロジェクト名が必要な場合は、以下のクエリを使用します

SELECT  c.custname ,
        p.pjtitle
FROM    Customer AS c
        INNER JOIN project AS p ON c.CUSTNO = p.CUSTNO
        INNER JOIN task AS t ON p.PJNO = t.PJNO
WHERE   t.EMPID = 'GLC'

従業員GLCとCACの両方が必要な場合は、

SELECT  c.custname ,
        p.pjtitle
FROM    Customer AS c
        INNER JOIN project AS p ON c.CUSTNO = p.CUSTNO
        INNER JOIN task AS t ON p.PJNO = t.PJNO
WHERE   t.EMPID = 'GLC'
        AND t.EMPID = 'CAC'
于 2013-06-15T06:25:29.683 に答える
0

これを試して:

SELECT c.custname, p.pjtitle 
FROM customer AS c 
JOIN project AS P ON P.CUSTNO = P.CUSTNO
JOIN tack AS t ON t.pjno = p.pjno
WHERE t.empid = 'GLC'
AND NOT EXISTS (SELECT NULL FROM TASK WHERE empid = 'GLC' AND empid = 'CAC');
于 2013-06-15T06:31:54.530 に答える
0

この回答を確認してください これはうまくいくはずです

select c.custname, p.pjtitle 
  from project p, customer c where c.custno = p.custno 
and exists
(select t.pjno from task t where t.empid = 'GLC' and p.pjno = t.pjno 
and   t.pjno not IN (select pjno from task where empid = 'CAC'))
于 2013-06-15T07:02:52.623 に答える