我只需要从两个相应的表中选择一行,例如
会员表,
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
再次感谢!
答案 0 :(得分:2)
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
或者批准的行中不需要任何东西。所以,条件。
答案 1 :(得分:0)
为查询添加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'
答案 2 :(得分:0)
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'
答案 3 :(得分:0)
您无需使用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
是否有可能在右表上有多个列,而您只想获得一个?你想要最后批准的图像吗?添加以下内容:
{{1}}
答案 4 :(得分:0)
要么像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