mysql:left join但是从连接表中选择一个特定项

我只需要从两个相应的表中选择一行,例如,

会员表,

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 – 例如,AND profile_picture.image_approved =’yes’

它只在图像存在时才有效.但如果图像不存在,输出中没有任何内容,即使图像不存在也应如下输出.

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子句中.它是行选择条件的一部分,所以它进入了哪里.考虑一下你想要什么,你要么在profile_picture或者批准的行中都不需要.所以,条件.

点赞