【发布时间】:2015-10-18 07:44:21
【问题描述】:
我知道在 SO 上有很多类似的问题,我查看了其中的一些,即this,但这不足以解决我的问题
我有一张桌子proposals,看起来像这样:
proposalNum | PI | department | investigator | investigatorDepartment|
----------------------------------------------------------------------------
FP00003521 | Bush,Raj | GIS | Amm,Anna | CIS |
FP00003521 | Bush,Raj | GIS | Milton,Ross | CIS |
FP00003521 | Bush,Raj | GIS | Landis, Amy | SEB |
FP00069606 | Mill, Ash | DIA | Keller, Bill | FAA |
我基本上想看看investigator字段并创建:
Amm,Anna | Milton, Ross
Amm,Anna | Landis, Amy
Milton,Ross | Landis, Amy
对于所有拥有CIS 的调查员,以及给定的proposalNum(在本例中为FP00003521)
(这里是SQL FIDDLE)
我这样做了:
SELECT p1.investigator,p2.investigator
FROM proposals AS p1
CROSS JOIN proposals AS p2
WHERE p1.investigatorDepartment='CIS'
AND p1.investigator!=p2.investigator
AND p1.proposalNum=p2.proposalNum
得到:
Milton,Ross | Amm,Anna
Amm,Anna | Milton,Ross
Amm,Anna | Landis, Amy
Milton,Ross | Landis,Amy
但是那里有重复...
按照链接帖子上的逻辑,我也尝试了:
SELECT p1.investigator,p2.investigator
FROM proposals AS p1
CROSS JOIN proposals AS p2
ON p1.investigator < p2.investigator
WHERE p1.investigatorDepartment='CIS'
AND p1.investigator!=p2.investigator
AND p1.proposalNum=p2.proposalNum
我得到了这个:
Amm,Anna | Milton,Ross
Amm,Anna | Landis, Amy
问题是当我添加ON p1.investigator < p2.investigator 条件时,它也不会添加Milton,Ross 和Landis, Amy,因为M > L
我将如何重写我的查询来解决这个问题?
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
p1.investigatorDepartment='CIS'->Landis, Amy的部门是 SEB。这就是它没有出现的原因。您应该修改您的规则,或将p1.investigatorDepartment='CIS'更改为(p1.investigatorDepartment='CIS' OR p2.investigatorDepartment='CIS') -
@Sebas 谢谢...但是如果
Landis,Amy没有出现的原因是因为='CIS'条件,为什么它会出现在第一个?我尝试了OR条件,但重复次数更多。 -
Landis,Amy 出现在第一个,但在右侧,因为 Amm,Anna 被包括在内。你想要它在左边。
-
@Sebas Um.... 为什么我要在左侧?
-
不知道怎么解释。你的规则是歪的。您应该使 p1 和 p2 受 CIS 限制,否则您希望实现的唯一性约束以过滤掉重复项也应该使用该列。
标签: mysql sql join duplicate-removal cross-join