【发布时间】:2018-01-17 21:19:44
【问题描述】:
所以,让我们试着让这件事变得简单。 假设我有三个表(我将在这里发布感兴趣的有用属性):
DEVELOPERS( dev_id, ...)
COLLABORATIONS( activity_id, dev_id, ... )
ACTIVITY( activity_id, ...)
Collaborations 是一个表格,用于将完成的所有活动链接到从事这些活动的开发人员(它的主键是 activity_id, dev_id 对)。重要的部分是,在一个 Activity 上至少可以工作 1 个开发人员,但最多可以工作(没有限制)
我需要知道并且我发现很难掌握的方法是 dev_ids 的所有开发人员对(并且只有对)从未合作过(也就是没有具有相同 activity_id 的协作元组以及他们的 dev_id) 但是,他们都在其他一些协作中与(至少一个)相同的“第三开发者”一起工作
因此,我需要得到一个行表,其中有两列包含满足要求的每一对开发人员。
请注意,我并不是要检查与两个开发者的合作,而是要检查他们中的每一个。
我的第一个想法是首先找到所有一起工作的开发人员,从所有开发人员列表中删除他们的 dev_id(可能带有例外?)(所以我只有那些从未在他们自己内部合作过的人)并从那里开始。
有什么想法或建议吗?
添加示例以进行说明:
activity_id dev_id
1 2
1 3
1 5
2 1
2 3
3 1
3 4
3 2
因此,例如,这里的 dev 3 和 4 从未一起工作,但都与至少另一个相同的 dev(在本例中为 dev 1 和 dev 2)一起工作
Dev 1 和 5 从未一起工作,但都与至少另一个相同的 dev(在本例中为 dev 3 和 dev 2)合作
Dev 4 和 dev 5 从未一起工作,但都与至少另一个相同的 dev(在本例中为 dev 2)合作
所以查询应该返回
devA devB
3 4
1 5
4 5
【问题讨论】:
-
更新您的问题添加适当的数据样本和预期结果
-
你的尝试在哪里?您在寻找免费为您工作的人吗?
-
@KoshVery 这就是为什么我要求“想法或建议”,而不是现成的解决方案。我真的被卡住了,因为我不知道如何继续能够在 sql 中进行这种比较(我不习惯使用 db,我是一个前端人员)。我会很高兴回答“这些类型的比较是由 blabla 和 blabla 完成的,明白了吗?”然后我会尝试不发布乱码
-
这读起来很像数据库课程介绍中的作业问题
-
请准确标注。这实际上是用于哪个数据库?
Postgres <> MySQL它们具有不同的功能和语法。只选择一个。
标签: sql database postgresql