Mysql SQL仅在满足条件时加入

Mysql SQL仅在满足条件时加入,mysql,sql,join,Mysql,Sql,Join,我有一个用户可以共享内容的网站 我有一个名为“Posts”的表,有两列“类型”和“媒体”。“Type”列标识了该帖子的类型。i、 e.如果它包含任何照片或如果它只是一个普通的帖子。如果包含照片,“Type”列将具有值“b”,如果是没有照片的空白帖子,则具有值“a”。如果“Type”的值等于“b”,“Media”列将有一个ID整数,因为该值标识贴在帖子上的照片 在一个单独的表中,“照片”为上传的每张照片提供一个唯一的ID。该唯一ID被放入“Posts”表中的“Media”的值中 如果“Type”的

我有一个用户可以共享内容的网站

我有一个名为“Posts”的表,有两列<代码>“类型”和
“媒体”
“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语句中使用子查询,尤其是当它只是用于输出而不是用作标准时。更容易重用(至少在我看来)。