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

标签 mysql sql join inner-join

我有一个相当大的 SQL 查询来检查通知,并且表中有几种不同类型的通知,IE:帖子、喜欢、评论、照片评论、照片喜欢、视频喜欢等。(总是向其中添加更多内容)我遇到了一个问题,我真的不知道如何最好地做到这一点。到目前为止,我完成的方式工作得很好,而且确实很容易添加,但是这个通知类型我必须检查的不仅仅是一个其他表,我必须检查另外两个表,但我无法让它发挥作用。

所以它是:(这只是我的巨大查询的一部分,真正相关的部分)

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,那么它就会被删除,不应该被删除)回到) 所以它会是这样的:

如果 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

关于mysql - 复杂的SQL查询,检查多个表中的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14222605/

相关文章:

php - 具有相同表的多个连接的 SQL

mysql - 这种 SQL 结构(在 mysql 数据库中)在现实世界模型中是否有效?

sql - 根据日期或计数自动删除重复的 SQL 记录

Linux/Unix — 管道输出以加入

mysql - iOS 和 Mac OSX 与 MySQL 数据库通信

javascript - PHP 和 MySQL 中的动态下拉列表

java - SQLException 参数索引超出范围

php - 选择查询的顺序在准备好的语句中不起作用

mysql连接查询。但是,某些数据没有连接数据

mysql - 从连接表中选择 rev_parent_id=0 的第一个条目