【问题标题】:SQL select within inner joins内部连接中的 SQL 选择
【发布时间】:2012-05-24 06:54:13
【问题描述】:

我的问题是:如何在一个 sql 查询中获取不同的值?我正在尝试这个:

SELECT 
          q.id,
          q.question_title,
          SUM(op.option_value) AS total_votes,
          COUNT(op.option_value) AS number_votes,
          tab.comments 
FROM
          questions_options AS op 
          INNER JOIN questions AS q 
                    ON (q.id = op.q_id) 
          INNER JOIN 
                    (SELECT 
                              SUM(p.unseen) AS comments 
                    FROM
                              questions_options AS p) tab 
                    ON (q.id = tab.q_id) 
WHERE op.option_value > 0 
GROUP BY q.question_title 

如果我删除中间的“INNER JOIN”(即显示 ID、问题标题、总票数和票数......

但我也想显示未见过的 cmets,这是该表中的另一个字段,对未见(未读)评论取“1”...

那么我怎样才能通过输入看不见的 cmets 号码来做到这一点......任何想法或建议......

【问题讨论】:

  • 您已经从名为“tab”的子查询中删除了 q_id 字段,因此您当然不能再加入该字段。你可能想要(select sum(p.unseen), p.q_id from questions_options as p group by q_id) tab
  • 嗨....是的,你是对的..它显示了一些结果...但是所有字段都有 2 个,我只想要那些有未读 cmets 的字段...谢谢跨度>

标签: sql select inner-join


【解决方案1】:

我认为心理法官是对的。

您应该在子查询中选择“q_id”字段,以便能够对“tab.q_id”进行内部连接。

-解释-

您的第一个 INNER JOIN 如下所示:

SELECT * FROM questions_options AS op INNER JOIN questions AS q ON (q.id = op.q_id)

..所以基本上你的两个表之间的关系(和连接)是基于 questions.idquestions_options.q_id

嗯,对于您的子查询来说,情况也是如此。

在您的子查询中,您定义了一个 SELECT 语句 FROM "questions_options", 它只会返回您在 SELECT 之后放置的列/字段。

(SELECT SUM(p.unseen) AS comments FROM questions_options AS p) tab

为了能够使用您的子查询中的任何数据,您必须SELECT questions_options.q_id 字段并已与 questions.id 字段进行连接 在您的主查询中。

(SELECT p.q_id, SUM(p.unseen) AS comments FROM questions_options AS p) tab INNER JOIN (...subquery...) ON (q.id = tab.q_id)

所以tab.q_id 指的是您在子查询中选择的p.q_id

【讨论】:

  • 是的,工作正常...通过在子查询中选择 q_id 字段...然后在 tab.q_id 上进行内部连接...谢谢约书亚。但我不明白这是如何工作的,您能否解释一下或编辑您的问题以获取详细信息...谢谢。
【解决方案2】:

我不知道我是否正确,但我在这里找到了一些东西。
如果你一遍又一遍地阅读 OP 的查询,你就会知道不需要第二次内连接。
您也可以将 sum(p.unseen) as comments 放在第一个 select 本身,因为它也是基于 q.id = tab.q_id, which by itself comes in the first inner join betweenquestionsandquestions_options` 从 questions_options 表中询问的。
希望对你有帮助。

【讨论】:

  • 你是对的 Abhinav,但对于这种情况,有不同的事情......bcz 我们在 option_value 中放置了一些问题评级,并为 cmets 放置了 cmets 值......所以这就是为什么它不能执行你所说的.....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2017-01-01
  • 2010-12-28
  • 1970-01-01
  • 2010-12-26
  • 2021-03-16
相关资源
最近更新 更多