gpt4 book ai didi

mysql - SQL交叉连接中的重复对?

转载 作者:行者123 更新时间:2023-11-29 12:04:57 25 4
gpt4 key购买 nike

我知道 SO 上有很多与此类似的问题,我查看了其中的一些问题,即 this ,但这还不足以解决我的问题

我有一张 table 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,RossLandis, AmyM > L

我该如何重写查询来解决这个问题?

任何帮助将不胜感激,谢谢!

最佳答案

您可以以不同于 CIS 的方式加入那些 p2。一种方法如下。

select
p1.investigator,
p2.investigator
from
proposals AS p1
cross join
proposals AS p2
where
p1.investigatorDepartment = 'CIS' and ((
p2.investigatorDepartment = 'CIS' and
p1.investigator < p2.investigator
) or (
p2.investigatorDepartment != 'CIS' or
p2.investigatorDepartment is null
)) and
p1.proposalNum = p2.proposalNum;

SQL Fiddle

关于mysql - SQL交叉连接中的重复对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31664677/

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