2017-08-29 51 views
0

我想进行查询以选择用户未注册的所有研讨会信息。我想用1个查询获得所有数据。查询选择用户未注册的所有研讨会

这就是:车间表 The workshops table 的:登记表 ​​ 的:workshop_rounds表 The workshop_rounds table

希望你们有些人能帮助我。 在此先感谢!

我试过这个查询,但它不是我想要的,它很接近但并不完全。

SELECT * FROM `workshop_rounds` WHERE `id` != ALL (SELECT `workshop_round_id` FROM `registrations` WHERE `user_id` = 1) AND `workshop_id` != ALL (SELECT `workshop_id` FROM `workshop_rounds` WHERE `workshop_id`= ALL (SELECT `workshop_round_id` FROM `registrations` WHERE `user_id` = 1)) 

结果是: enter image description here

但现在我也想不相同workshop_id的用户被注册轮得到其他回合。希望你能理解我。

+0

到目前为止您尝试过哪些方法?您卡在哪里? – Jens

+0

我试过这个 –

+0

见https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very -simple-sql-query – Strawberry

回答

1

使用NOT EXISTS

SELECT * 
FROM workshops w 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM registrations r 
    JOIN "workshop_rounds" wr ON r."workshop_round_id" = wr.id 
    WHERE wr.workshop_id = w.id 
      AND r."user_id" = 1 
); 

,也许更简洁NOT IN

SELECT * 
FROM workshops w 
WHERE w.id NOT IN 
(
    SELECT wr.workshop_id 
    FROM registrations r 
    JOIN "workshop_rounds" wr ON r."workshop_round_id" = wr.id 
    WHERE r."user_id" = 1 
); 
1

对于单个用户,我会not exists接近这一点:

select w.* 
from workshops w 
where not exists (select 1 
        from registrations r 
        where r.workshop_id = w.id and 
         r.user_id = THE USER ID 
       ); 
+0

这是不是我想回来,谢谢你的尝试寿 –

0


试试这个去取所有用户的研讨会未注册

select ws.* from workshops ws 
     where ws.id not in (select w.id from workshops w, workshop_rounds wr, registrations r 
       where r.workshop_round_id = wr.id and wr.workshop_id=w.id and r.user_id = THE_USER_ID);