join-with-subquery-sql语法问题

g6ll5ycj  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(367)

我想在一个名为w.toy\u id的列中找到重复次数最多的值,因为它与另一个名为ch.child\u id的列相关。这就是为什么我将它放在联接中,而不是放在dream\u toy的位置,但现在它给了我一个错误:缺少表“w”的从句条目。
我是sql的新手,所以如果这是一个愚蠢的问题,我很抱歉,但我已经用了几个小时这个问题,我绝望了。
有人能帮我吗?

FOR setof IN
      SELECT ch.child_id,ch.child_name, ch.city
            ,SUM(l.number_toys)
            ,COUNT (l.letter_id)
            ,MAX(l.number_toys),
            ,dream_toy
      FROM (CHILD ch LEFT JOIN LETTER l ON ch.child_id=l.child_id) 
            LEFT JOIN (SELECT w.toy_id
                       FROM WISHED_TOY w
                       GROUP BY w.toy_id
                       ORDER BY COUNT(w.toy_id) 
                       LIMIT 1) dream_toy ON (w.letter_id=l.letter_id)
      GROUP BY ch.child_id
      ORDER BY -SUM(l.number_toys) ASC, ch.child_name ASC 
      LIMIT 10
LOOP
    RETURN NEXT setof;
END LOOP

非常感谢!

ndh0cuux

ndh0cuux1#

如果我只接受这个查询,您需要命名提供主查询(l1)的子查询,并且您需要在join中使用“dream\u toy”,因为这就是您命名它的方式。我只做了一些需要做的改动,但你会明白重点的。

SELECT ch.child_id,ch.child_name, ch.city
        ,SUM(l.number_toys)
        ,COUNT (l.letter_id)
        ,MAX(l.number_toys),
        ,dream_toy
  FROM (CHILD ch LEFT JOIN LETTER l ON ch.child_id=l.child_id) as l1
        LEFT JOIN (SELECT w.toy_id
                   FROM WISHED_TOY w
                   GROUP BY w.toy_id
                   ORDER BY COUNT(w.toy_id) 
                   LIMIT 1) dream_toy ON (dream_toy.letter_id=l1.letter_id)
  GROUP BY ch.child_id
  ORDER BY -SUM(l.number_toys) ASC, ch.child_name ASC 
  LIMIT 10

相关问题