【问题标题】:Two subqueries added to addition complex mySQL query returning no records添加了两个子查询以添加不返回记录的复杂 mySQL 查询
【发布时间】:2012-10-15 16:51:53
【问题描述】:

我有这段代码,而且它们都单独工作,所以我认为它一定是错误放置的语法:

SELECT i.*, o.organ_name, o.organ_logo, vtable.*, cc.ccount
FROM heroku_056eb661631f253.op_ideas i
JOIN

上面收集了op_ideas表中的所有记录。

(SELECT v.idea_Id,
    COUNT(v.agree = 1 or null) as agree,
    COUNT(v.disagree = 1 or null) as disagree,
    COUNT(v.obstain = 1 or null) as abstain
FROM op_idea_vote v
GROUP BY v.idea_id
) AS vtable ON vtable.idea_id = i.idea_id

然后上面搜索另一个表并计算每条记录的投票并将其添加到行中。

JOIN 
(SELECT ccc.idea_id AS cid, COUNT(ccc.idea_id = 1 or null) AS ccount 
FROM op_comments ccc
GROUP BY idea_id
) AS cc ON cid = i.idea_id

上面统计了idea_id附加了多少个cmets,并将其添加到主行。

LEFT JOIN op_organs o ON i.post_type = o.organs_id

上面将另一个表连接到现有行,该行可能为空白也可能不是空白

WHERE idea_geo = 'International';

上面的国际被替换为可能等于:本地、区域、国家或国际的变量。

问题:查询触发但返回为空,但如果单独放置它们可以工作。有人可以指出我正确的方向吗?

这是帮助阅读的完整代码:

Here is another issue, I think I have placed the code in the wrong place.  Wanting to add another sub SELECT to count how many comments are per idea:

SELECT i.*, o.organ_name, o.organ_logo, vtable.*, cc.ccount
FROM heroku_056eb661631f253.op_ideas i
JOIN
(SELECT v.idea_Id,
    COUNT(v.agree = 1 or null) as agree,
    COUNT(v.disagree = 1 or null) as disagree,
    COUNT(v.obstain = 1 or null) as abstain
FROM op_idea_vote v
GROUP BY v.idea_id
) AS vtable ON vtable.idea_id = i.idea_id
JOIN 
(SELECT ccc.idea_id AS cid, COUNT(ccc.idea_id = 1 or null) AS ccount 
FROM op_comments ccc
GROUP BY idea_id
) AS cc ON cid = i.idea_id
LEFT JOIN op_organs o ON i.post_type = o.organs_id
WHERE idea_geo = 'International';

提前致谢。

编辑新解决方案

感谢 WayneC 和 Conrad,我们有一个完整的工作查询。

代码如下:

SELECT i.*, o.organ_name, o.organ_logo, vtable.*
FROM heroku_056eb661631f253.op_ideas i
LEFT JOIN
(SELECT v.idea_Id, cc.*,
    COUNT(v.agree = 1 or null) as agree,
    COUNT(v.disagree = 1 or null) as disagree,
    COUNT(v.obstain = 1 or null) as abstain
FROM op_idea_vote v 
LEFT JOIN 
    (SELECT idea_id AS id,COUNT(*) AS ccount 
    FROM op_comments cco
    GROUP BY cco.idea_id
    ) AS cc ON cc.id = v.idea_id
GROUP BY v.idea_id
) AS vtable ON vtable.idea_id = i.idea_id
LEFT JOIN op_organs o ON i.post_type = o.organs_id
WHERE idea_geo = 'International';

【问题讨论】:

  • idea_geo在哪个表?如果它在 op_organs 中,那么您需要将您的位置更改为 idea_geo = 'International' or idea_geo IS NULL
  • @ConradFrix Hiya。它在表中op_ideas i
  • 嗯,您确定两个子查询中都有任何 Idea_id 值
  • 是的,如果我拿出第二个潜艇,它就像一个魅力。如果我把第二个子放在它自己上,它似乎工作得很好。但是一旦 lil 一个人在床上,我会再试一次。但我确信它有效。它只是知道把第二个放在哪里。我试着把它放在第一个 Sub 中,因为逻辑上(对我来说)它应该级联。没有错误,只是没有结果。
  • 如果我是你,我会将两个连接更改为 LEFT JOIN 并将选择更改为 SELECT i.idea_id, vtable.idea_id , cc.cid 并确认有记录是第二个不为空

标签: mysql count subquery


【解决方案1】:

而答案如下:

SELECT i.*, o.organ_name, o.organ_logo, vtable.*
FROM heroku_056eb661631f253.op_ideas i
LEFT JOIN
  (SELECT v.idea_Id, cc.*,
    COUNT(v.agree = 1 or null) as agree,
    COUNT(v.disagree = 1 or null) as disagree,
    COUNT(v.obstain = 1 or null) as abstain
    FROM op_idea_vote v 
LEFT JOIN 
  (SELECT idea_id AS id,COUNT(*) AS ccount 
    FROM op_comments cco
    GROUP BY cco.idea_id
    ) AS cc ON cc.id = v.idea_id
  GROUP BY v.idea_id
  ) AS vtable ON vtable.idea_id = i.idea_id
  LEFT JOIN op_organs o ON i.post_type = o.organs_id
WHERE idea_geo = 'International';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2015-02-21
    • 2017-09-14
    • 2019-12-10
    相关资源
    最近更新 更多