簡體   English   中英

返回值取決於類似的記錄是否存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM