2016-06-20 5 views
0

データベースタスクの3つのテーブル、ユーザー&が割り当てられています。他のユーザーがタスクを完了したかどうかを確認するクエリのヘルプが必要

タスクにはAdminによって作成されたタスクの情報が含まれます。ユーザーはユーザー& assignedToのリストで、どのタスクがどのユーザーに割り当てられているかに関する情報が含まれています。

ダッシュボードでユーザーに割り当てられたタスクのリストを表示するには、 'assignedTo'テーブルでクエリする必要があります。問題は1つのタスクが複数のユーザーに割り当てられている可能性があり、そのうちの1つによってタスクが完了する可能性があります。だから私はOpen Statusにあり、割り当てられたリストの誰かによって完了されていないタスクを表示する必要があります。以下 「はassignedTo」テーブルの構造である:それはそれらのいずれかによって閉塞されないように上記データに従って、タスク1は、ユーザ1,2,3 & 4ダッシュボードに表示され

-------------------------------- 
| id | taskId | userId | status| 
-------------------------------- 
| 1 | 1  | 1  | open | 
| 2 | 1  | 2  | open | 
| 3 | 1  | 3  | open | 
| 4 | 1  | 4  | open | 
| 5 | 2  | 1  | open | 
| 6 | 2  | 2  | close | 
| 7 | 3  | 1  | open | 
| 8 | 3  | 2  | open | 
-------------------------------- 

。 タスク2は、ユーザー2によって閉じられているため、誰のダッシュにも表示されません。 同様に、タスク1はユーザー1に表示されます。& 2ダッシュは両方に対してオープンなので、

私は同じテーブルを自分自身に参加しようとしましたが、実行に失敗しました。

SELECT * FROM assignedTo as a1 
JOIN assignedTo as a2 ON a2.taskId = a1.taskId AND a2.userId != 1 AND a2.status == 'open' 
WHERE a1.userId = 1 AND a1.status = 'open' 

可能であれば、クエリにお役立てください。

+0

複数のユーザーに1つのタスクを割り当てることができますか? – Strawberry

+0

@Strawberry Yes –

答えて

1

あなたはNOT EXISTSを使用することができます。

SELECT * 
FROM assignedTo a1 
WHERE NOT EXISTS(
    SELECT 1 
    FROM assignedTo a2 
    WHERE 
     a2.taskId = a1.taskId 
     AND a2.status = 'close' 
) 

ONLINE DEMO

2

あなたがいない中で使用して

select * 
from assignedTo 
where taskid not in (select distinct taskid 
         from assignedTo 
         where status = 'close'); 
1

それとも、外部結合を使用することができますが副選択することができます...

SELECT x.* 
    FROM assignedTo x 
    LEFT 
    JOIN assignedTo y 
    ON y.taskid = x.taskid 
    AND y.status = 'close' 
WHERE y.id IS NULL; 
関連する問題