当前位置: 首页 > 知识库问答 >
问题:

嵌套循环中的Mysql最外部表可见性

暨修洁
2023-03-14

让我们假设我有4个表:
'users'(id,username)、
'photos_comments'(id,photo_id,user_id,name)、
'photos_likes'(id,photo_id,user_id,text)、'photos_likes'(id,photo_id,user_id,test)。

我要计算的所有评论和喜欢的每个用户在所有他上传的照片的总和。为此,我试图构建一个查询:

SELECT users.*,
    (SELECT SUM(count) as rating FROM(
   SELECT COUNT(*) as count FROM photos_likes
     WHERE photos_likes.photo_id IN (SELECT photos.id FROM photos WHERE photos.user_id = users.id)
            UNION
   SELECT COUNT(*) as count FROM photos_comments
     WHERE photos_comments.photo_id IN (SELECT photos.id FROM photos WHERE photos.user_id = users.id)
 ) as total_rating) as rating FROM users

它返回“WHERE子句中的Users.id列未知”错误。所以看起来在大多数内部查询中都看不到用户表。我不明白为什么会出现这种情况,因为另一个类似的查询可以正常工作:

SELECT users.*,
    (SELECT COUNT(*) as count FROM photos_likes
  WHERE photos_likes.photo_id IN (SELECT photos.id FROM photos WHERE photos.user_id = users.id)) as likes_count,

   (SELECT COUNT(*) as count FROM photos_comments
     WHERE photos_comments.photo_id IN (SELECT photos.id FROM photos WHERE photos.user_id = users.id)) as comments_count FROM users

在该查询中,它可以从大多数内部查询中的用户表行中抓取id。为什么会这样?多谢帮忙。

共有1个答案

鲍俊杰
2023-03-14

查看FROM子句中的子查询:

FROM子句中的子查询不能是相关子查询,除非在联接操作的ON子句中使用。

在第二个示例中,您在where子句中使用子查询。这就是区别。

 类似资料:
  • 这是一个正常的嵌套循环,具有复杂性 我很难理解为什么下一个循环也有复杂性,即使它打印的语句更少 有什么想法吗?

  • 问题内容: 如果我在一个循环中有一个循环,并且一旦满足一条语句,我想中断主循环,那我应该怎么做? 这是我的代码: 问题答案: 使用标记的中断: 另请参阅 Java代码中的“循环:”。 这是什么,为什么会编译? 文献资料

  • 我需要12次外循环,每个外循环1次内循环 例如: 等 但现在我的内循环在第一次迭代的外循环上运行。 请帮助我如何使用for循环执行此操作。

  • 问题内容: 我需要在Robot框架中创建一个嵌套循环。你能帮我吗? 我需要一个嵌套循环,将所有循环与文件中的所有循环进行比较。 提前致谢 问题答案: RF中没有嵌套循环;这只能通过在外部的内部循环调用一个关键字来完成。 不过,在您的特定情况下,可以不使用它-因为您想匹配整行,所以可以通过“应包含”来实现: 如果您要进行部分比赛-即成为会员的一部分,那么就不可能这样。

  • 我用C写了一个brainfuck解释器。这个程序有链表的实现,链表存储brainfuck指令,堆栈存储brainfuck的“[”指令。 我认为我的程序并不是在所有情况下都支持嵌套循环。这很荒谬,但这个brainfuck程序可以正确地使用我的Interpeter并打印“Hello World!”到stdout: 但该程序无法正常工作,并将内存错误打印到标准输出: 这两个例子适用于在线中断器-http

  • 我想在一个并行外部循环中运行一个包含for循环(应该并行运行)的函数。因此看起来如下所示: 给定上面的代码,我希望在函数中为循环创建5个并行线程,并且希望这5个线程中的每个线程创建另一个线程来运行自己的并行for循环。