gpt4 book ai didi

Mysql - 跨表排除有效..几乎

转载 作者:行者123 更新时间:2023-11-30 00:07:34 27 4
gpt4 key购买 nike

我构建了这个:

[ Workshop_templates 表 ]
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


我只需要显示 user1 从未注册过的 Workshop_templates.workshop_name(s)。
这里的结果将是“建立信任 (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?)....

最佳答案

返回“user1”不在workshop_instance表中的所有workshop名称。LEFT 连接返回左侧表中的所有记录,并且仅返回右侧表中的匹配记录。

因为我们总是希望所有研讨会都开始,然后我们想排除用户一参加的研讨会。我们使用左连接并将 user1 放在连接上。将其放在 where 会否定左连接(除非您包含(用户名 = '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不正确的地方应该是WI

关于Mysql - 跨表排除有效..几乎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24389675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com