簡體   English   中英

mysql:左聯接,但從聯接表中選擇一個特定項

[英]mysql: left join but select one particular item from the joined table

我只需要從兩個對應的表中選擇一行,例如,

會員表,

member_id   member_name
1           xxx
2           yyy

profile_picture表

image_id   member_id   image_approved
1          1           no
2          1           no
3          1           yes

我想每次從成員表中選擇一行,並從profile_picture中選擇一個批准的圖像。 我正在使用左聯接,但是當該成員具有1個以上上傳的圖像時,它會復制所選成員,因此無法正常工作。 棘手的部分是我要選擇僅已批准的圖像,並且始終只有一張照片將被批准。

SELECT *
    FROM member 

    LEFT JOIN profile_picture 
    ON profile_picture.member_id = member.member_id

    WHERE member.member_id = '1'

我想將此作為輸出,

member_id   member_name image_id image_approved
1           xxx         3        yes

可能嗎?

謝謝。

編輯:

謝謝大家的建議。 你們中許多人建議使用AND -例如, 與profile_picture.image_approved =“是”

它僅在存在圖像時起作用。 但是如果沒有該圖像,則即使沒有該圖像也應在下面這樣輸出,但輸出中沒有任何內容。

member_id   member_name image_id image_approved
1           xxx         null      null

再次感謝!

select
  *
from
  member m
  left join profile_picture p on p.member_id = m.member_id
where
  m.member_id = '1'
  and (p.image_approved is null or p.image_approved = 'yes')

image_approved是不是連接條件的一部分,所以我不提出,在join條款。 它只是行選擇條件的一部分,因此它進入where 考慮您想要什么,您要么在profile_picture或已批准的行中什么都不想要。 所以,條件。

在查詢中添加image_approved條件會為您提供給定輸入所需的輸出。

SELECT *
    FROM member 

    LEFT OUTER JOIN profile_picture 
    ON profile_picture.member_id = member.member_id

    WHERE member.member_id = '1'
          AND image_approved = 'yes'

你的意思是:

SELECT * 
    FROM member  
    LEFT JOIN profile_picture  
    ON profile_picture.member_id = member.member_id 
    WHERE member.member_id = '1' 
    AND profile_picture.image_approved = 'yes'

你並不需要使用LEFT JOIN其中一個INNER JOIN是合適的。 您需要在profile_picture上添加一列,對嗎? 似乎您所需要的只是一個額外的WHERE條件:

SELECT
   *
FROM
   member
   JOIN profile_picture USING (member_id)
WHERE
   member_id = 1
   AND image_approved = 'yes'

可能在右表上有多個列,而您只想獲得一列? 您要最后批准的圖片嗎? 添加以下內容:

GROUP BY
   member_id
ORDER BY
   image_id

按照Donnie的建議在WHERE子句中容納NULL,或者使用表表達式來限制您的第二張表,如下所示:

Select member.member_id, member_name, image_id, image_approved
From member LEFT Outer Join
     ( Select image_id, member_id, image_approved
       From profile_picture
       Where image_approved = 'yes' ) Images
          on Images.member_id = member.member_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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