繁体   English   中英

复杂的SQL查询,检查多个表中的列值

[英]Complex SQL query, checking column values in multiple tables

我有一个相当大的SQL查询来检查通知,并且我在表中有几种不同类型的通知,即IE:帖子,喜欢,评论,photoComments,photoLikes,videoLikes等。(总是向其中添加更多内容)遇到问题,我现在不确定如何最好地做到这一点。 到目前为止,我的工作方式非常完美,并且确实很容易添加,但是,这个通知类型不仅要检查另一个表,还要检查另外两个表,而我却无法检查让它工作。

所以这里是:(这只是我庞大的查询的一部分,实际上是唯一相关的部分)

n.uniqueID = ANY (
              SELECT photos.id
              FROM photos INNER JOIN posts ON (photos.id=posts.post)
              WHERE photos.state=0
              AND posts.state=0 
              AND posts.id = ANY (
                                   SELECT likes.postID FROM likes
                                   INNER JOIN posts ON (posts.id=likes.postID)
                                   WHERE likes.state=0 AND posts.state=0
                                  )
                )

因此,基本上我真正需要做的就是检查每个表中的state列,因为这表明是否将其删除(如果不为0,则将其删除并且不应返回),因此就像:

IF photos.state=0 AND posts.state=0 AND likes.state=0返回它。

  • n.uniqueIDposts.postphoto.id都将是相同的值。
  • posts.idlikes.postID也将是相同的值。

我的问题是,它似乎并没有检查likes.state ,我不认为。

我认为您只想在一个查询中将三个表连接在一起:

n.uniqueID = ANY (
              SELECT photos.id
              FROM photos INNER JOIN
                   posts
                   ON photos.id=posts.post inner join
                   likes
                   on posts.id = likes.postId
              WHERE photos.state=0 and
                    posts.state=0 and
                    likes.state = 0
                  )

您的逻辑是在状态为0的点赞或帖子时不返回。似乎所有点赞和帖子的状态均为零。 对于这一点,做一个聚合having条款:

n.uniqueID = ANY (
              SELECT photos.id
              FROM photos INNER JOIN
                   posts
                   ON photos.id=posts.post inner join
                   likes
                   on posts.id = likes.postId
              where photos.state = 0
              group by photos.id
              having MAX(posts.state) = 0 and MAX(likes.state) = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM