[英]Return value depending on similar record exists
我正在工作的團隊成員列表。 團隊可以有1個領導者或2個共同領導者。
表: 位置
Position_ID | Position_Name
表: 參與
Position_ID | Project_ID | Person_ID
在排名表中,Position_ID'7'具有Position_Name'Leader / Co-leader'。
假設有一個約翰(Person_ID = 5)參加了Project_ID = 2的項目,而在該項目中他的Position_ID = 7。
如果有吉姆(Person_ID = 9)也參與了該項目(Project_ID = 2)並且也在該職位上任職(Position_ID = 7),則Person_ID = 5的John職位為“共同負責人”。 返回數組(person_id => 5,name => John,position => Co-leader,position_id => 7,project_id => 2)
如果沒有,約翰的職位是“領導”。 返回數組(person_id => 5,name => John,position => Leader,position_id => 7,project_id => 2)
到目前為止,我的推理是:
從參與中選擇,加入成員以獲取成員詳細信息,並加入職位以獲取職位名稱。
如果職位ID不為7,則表示不是領導者/共同領導者,那就順其自然。
如果職位ID為7,則在“參與”中檢查是否存在具有相同職位ID和項目ID但人ID不同的記錄。
如果有的話,請從位置7的名稱中剪掉后半部分,並僅返回“共同領導者”。 如果沒有,則削減前半部分,僅返回“領導者”。
問題:我不知道該如何表達“另一條記錄的個人ID與當前記錄的個人ID不同”。
簡化的MySQL
SELECT
IF(`i`.position_id = 7,
IF(EXISTS(SELECT 1 FROM `i` WHERE ????),
SUBSTRING...,
SUBSTRING...)
,po.`name`)
AS `position`,
FROM `involvements` i
JOIN `members` m ON m.`id` = i.`person_id`
JOIN `positions` po ON po.`id` = i.`position_id`
WHERE i.`project_id` = 2
也許這將使您朝正確的方向前進。但是,由於我不了解您對所需數據布局的看法,這可能與您追求的不完全一樣。
聯接簡單地標識同一項目中是否有兩個人處於相同的職位7。如果找到任何記錄,則這些記錄是共同領導者,在案例陳述中被標識。
SELECT i.person_Id
, m.name as MemberName
, case when i2.po.position_ID is null then po.name
else 'Co-Leader' end as Position
FROM `involvements` i
JOIN `members` m
ON m.`id` = i.`person_id`
JOIN `positions` po
ON po.`id` = i.`position_id`
LEFT JOIN involvements i2
on i2.`position_Id` = po.`position_ID`
and po.position_ID = 7
LEFT JOIN members m2
on m2.`id` = i2.`personID`
and m2.`person_ID` <> m.`person_ID`
WHERE i.`project_id` = 2
在項目ID和職位ID相同的地方再次左加入職位表,但是僅接受職位ID為7(領導者)且人員ID不匹配的那些記錄。 如果沒有這樣的記錄(該表中的值將為空),則它是一個領導者,否則它是一個共同領導者。
SELECT
IF(i2.person_id is null,'leader','co-leader')
AS `position`,
FROM `involvements` i
INNER JOIN `members` m ON m.`id` = i.`person_id`
INNER JOIN `positions` po ON po.`id` = i.`position_id`
LEFT JOIN `involvements` i2 on i.project_id=i2.project_id and i.position_id=i2.position_id and i.person_id<>i2.person_id and i2.position_id=7
WHERE i.`project_id` = 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.