【问题标题】:JOIN with subquery - Syntax Problems SQL加入子查询 - 语法问题 SQL
【发布时间】:2018-11-06 00:51:36
【问题描述】:

我想在名为 w.toy_id 的列中找到重复次数最多的值,因为它与名为 ch.child_id 的另一列相关。 这就是为什么我在 JOIN 中而不是在 dream_toy 的位置创建它的原因,但现在它给了我错误:缺少表“w”的 FROM 子句条目。

我是 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

非常感谢!

【问题讨论】:

  • 您能否分享一个具有所需输出的简单示例?
  • 请提供样本数据。你有什么和你想要的结果集中的什么。
  • limit 10 有什么作用?这似乎不是要求的一部分。无论如何,如需进一步帮助,请参阅meta.stackoverflow.com/questions/333952/…

标签: mysql sql postgresql join syntax


【解决方案1】:

如果我只接受查询,您需要将子查询命名为主查询 (l1),并且您需要在联接中使用“dream_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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2019-03-13
    • 2016-04-27
    相关资源
    最近更新 更多