Mysql SQL仅在满足条件时加入
我有一个用户可以共享内容的网站 我有一个名为“Posts”的表,有两列<代码>“类型”和Mysql SQL仅在满足条件时加入,mysql,sql,join,Mysql,Sql,Join,我有一个用户可以共享内容的网站 我有一个名为“Posts”的表,有两列“类型”和“媒体”。“Type”列标识了该帖子的类型。i、 e.如果它包含任何照片或如果它只是一个普通的帖子。如果包含照片,“Type”列将具有值“b”,如果是没有照片的空白帖子,则具有值“a”。如果“Type”的值等于“b”,“Media”列将有一个ID整数,因为该值标识贴在帖子上的照片 在一个单独的表中,“照片”为上传的每张照片提供一个唯一的ID。该唯一ID被放入“Posts”表中的“Media”的值中 如果“Type”的
“媒体”
。“Type”
列标识了该帖子的类型。i、 e.如果它包含任何照片或如果它只是一个普通的帖子。如果包含照片,“Type”
列将具有值“b”
,如果是没有照片的空白帖子,则具有值“a”
。如果“Type”
的值等于“b”
,“Media”
列将有一个ID整数,因为该值标识贴在帖子上的照片
在一个单独的表中,“照片”
为上传的每张照片提供一个唯一的ID。该唯一ID被放入“Posts”
表中的“Media
”的值中
如果“Type”
的值等于“b”
,我只想在我的SQL
语法中执行内部联接
有人能帮我指出正确的方向吗?在join
语句中可以有几个条件:
SELECT *
FROM posts
INNER JOIN photos ON posts.media = photos.id AND
posts.type = 'b'
听起来你真的想做一个左连接
。如果存在左连接
将为您提供数据,否则,将为照片显示空数据
也许是这样的:
Select *
From Posts
Left Join Photos on Posts.MEDIA = Photos.MEDIA
and Photos.Type = 'b'
如果这只是文本,它看起来会像:
Type Media Photo
a w/e
b w/e cats.jpg
您正在寻找一个左连接
;像下面这样
select * from posts p
left join photos pp on p.media = pp.media
and p.type = 'b'
正如Philip所建议的,最好的方法是使用外部联接,但是如果您确实想避免外部联接,则需要使用子查询
SELECT Type,
(Select case when p.type = 'p'
then photo [or whatever column you want] else null end
from Photos where id = p.Media) photo
FROM posts p
这太罗嗦了。但是,当它不会返回任何带有Type=a
的帖子时,我明白了——在这种情况下,你需要左连接,在类型='b'
上有第二个子句,我的问题是“为什么”。如果存在正确的外键关系,则如果介质中存在id
,则照片必须始终存在,因此您甚至不需要检查类型(因此,type
列已过时)。另外,我建议用图片来存储PostId,而不是相反,或者甚至用蜡笔画一个连接表,否则一个post只能有一张图片,这似乎是有限的。啊,这实际上是一个非常好的方法。我经常在Select语句中使用子查询,尤其是当它只是用于输出而不是用作标准时。更容易重用(至少在我看来)。