我有一个相当大的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.uniqueID
,posts.post
和photo.id
都将相同值。
posts.id
和likes.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/