我建立了这个:
[Workshop_templates table]
id_template | Workshop_name
1 | Conflict resolution
2 | Building trust
3 | Demencia
4 | Management
[Workshop_instances表]
id_workshop_instance | id_template | archived
18 | 1 | 1
23 | 3 | 0
[登记表]
username | id_workshop_instance
user1 | 18
user1 | 23
我只需要显示用户1从未注册的Workshop_templates.workshop_name(。)
结果将是' Buidling trust(2)'和管理(4)'
我写了这样的话:
(SELECT.FROM.)
WHERE id_workshop_instance
NOT IN (
SELECT id_workshop_instance
FROM Registrations
WHERE Registrations.username = Users.username )
AND Workshop_instances.id_template = Workshop_templates.id_template
AND Users.username = 'user1'
AND Workshop_instances.archived != 1
问题是这个请求完全排除了一般的研讨会,但它会显示冲突解决(1)'无论如何....(因为存档== 1?)....
答案 0 :(得分:0)
返回所有研讨会名称' user1'不在workshop_instance表中。 LEFT Joins返回LEFT表中的所有记录,只返回右侧表中的匹配记录。
由于我们总是希望所有研讨会都要开始,然后我们想要排除用户所采用的研讨会。我们使用左连接并将user1放在连接上。把它放在哪里会否定左连接(除非你包括(用户名=' user1'或者用户名为null)然后通过指示我们只对没有Workshop实例存在的事件感兴趣,我们得到用户1没有参与的模板。
Select WT.workshop_Name
FROM workshop_Templates WT
LEFT JOIN WorkShop_Instances WI
on WT.id_Template = WI.Id_template
LEFT JOIN Registrations R
on R.Id_Workshop_Instance = WI.id_workshop_Instance
and username = 'user1'
WHERE WI.ID_template is null;
- 更新了WT不正确的地方