我有一个表,关系,结构如此
Relationships
------
Relationship Employer_ID Employee_ID
10000 10020 10021
10001 10019 10020
10002 10021 10018
其中雇主和雇员之间的关系由关系栏唯一标识。员工可以拥有多个雇主,雇主可以拥有多个雇员。每个人都有自己的唯一ID - 可以在雇主和员工ID字段中多次出现。
和另一张表,评论,结构如此。
Meetings Review
------
Meeting Attendee_ID
10000 10020
10000 10019
10001 10018
10001 10021
此表显示会议和与会者列表。只有两个人可以参加会议 - 每个与会者,参加会议,在参加者字段中代表一次。 “与会者”字段中的ID可以与“关系”表中“雇主/员工”字段中的ID连接。
我想得到如下结果集 - 其中每一行都是一个独特的会议,我们通过使用两个单独的列(Employer_ID和Employee_ID)确定了两个会议与会者之间的关系。
Results
-----
Meeting Employer_ID Employee_ID
10000 10019 10020
10001 10021 10018
我的问题是 - 从概念上讲,我将如何做到这一点?
我最初的想法是,我应该在Attendee_ID上使用最大值和最小值,然后创建两个派生表 - 一个最大与会者ID(Attendee_1)匹配雇主ID和最小ID(Attendee_2)匹配的表在员工ID上。然后,使用UNION查询将此结果集添加到另一个派生表,其中最大与会者ID(Attendee_1)与员工ID匹配,最小ID(参加者)2)与雇主ID匹配。
这似乎给了我预期的结果,但是有更好的方法吗?
答案 0 :(得分:0)
如果每个会议只有两个元素我认为最好的解决方案是第二个别名
Meetings Review
------
Meeting Attendee_ID
10000 10020
10000 10019
10001 10018
10001 10021
您可以通过这种方式获得单行结果
select a.Meeting , a.Employer_ID b.Employer_ID
from Review a
inner join Review b on a.Meeting = b.Meeting and a.Employer_ID != b.Employer_ID
答案 1 :(得分:0)
从概念上讲,两个与会者之间的关系由Relationships
表中的记录决定 - 我不认为你可以假设ID是大还是小都有一些神奇的含义。您的样本数据显示了这一点 - 10020是10021的雇主,但10021是10018的雇主。
因此,您正在寻找Meetings Review
meeting
列相同,
并且一个值与来自attendee_ID
的{{1}}是employer
的记录匹配,
,另一个值与Relationships
中attendee_id
为employee
的记录相匹配,
来自Relationships
的两个记录都具有相同的Relationships
值。