3

3つのテーブルがあります。t1にはイベントが含まれ、t2には「出席した」イベントが含まれ、t3にはいくつかの招待されたユーザーID(システムユーザーIDにリンクされています)が含まれます。複数のユーザーが参加してイベントを開催できます。

新しいイベントが作成されると、t1に挿入されます。ユーザーがイベントへの参加を確認するたびに、行がt2に挿入されます。それ以外の場合、t2テーブルは空になります。

以下のクエリは、ユーザーが参加しているすべてのイベントをプルします。

SELECT * FROM events t1
INNER JOIN attending_events t2 ON t1.id_ev = t2.id_ev
INNER JOIN attending_users t3 ON t2.id_user = t3.id_user AND t3.id_system_user=17
WHERE t1.id_comp = 42

助けてください、私は正反対のことをするためのクエリが必要です、ユーザーが参加していないイベントを見つけてください。

4

2 に答える 2

3
SELECT  e.*
FROM    events e
WHERE   e.id_ev NOT IN
        (
        SELECT  id_ev
        FROM    attending_events ae
        JOIN    attending_users au
        ON      au.id_user = ae.id_user
        WHERE   au.system_user_id = 17
        )
        AND id_comp = 42

また:

SELECT  *
FROM    events e
LEFT JOIN
(
        attending_events ae
JOIN    attending_users au
ON      au.id_user = ae.id_user
)
ON      ae.id_ev = e.id_ev
        AND au.system_user_id = 17
WHERE   e.id_comp = 42
        AND ae.id_ev IS NULL
于 2012-06-01T11:38:38.723 に答える
0
select * from attending_events where id_ev not in 
(SELECT id_ev FROM events t1
INNER JOIN attending_events t2 ON t1.id_ev = t2.id_ev
INNER JOIN attending_users t3 ON t2.id_user = t3.id_user AND t3.id_system_user=17
WHERE t1.id_comp = 42)

最初に頭に浮かんだこと。間違いなく最適化する必要があります。

于 2012-06-01T11:38:20.227 に答える