我的问题是:如何在一个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,问题标题,总票数等级和投票数....
但是我想要显示看不见的评论,这是该表中的另一个字段,对于看不见的(未读)评论采用“1”...
那么我怎么能通过放置看不见的评论数字来做到这一点....任何想法或建议......
答案 0 :(得分:3)
我认为智慧法官是对的。
您应该在子查询中选择“q_id”字段,以便能够将内部联接设置为“tab.q_id”。
<强> -Explanation - 强>
您的第一个INNER JOIN
看起来像这样:
SELECT * FROM questions_options AS op INNER JOIN questions AS q ON (q.id = op.q_id)
..所以基本上两个表之间的关系(和连接)基于
questions.id
和questions_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
。
答案 1 :(得分:1)
我不知道我是否正确,但我在这里找到了一些东西
如果你一次又一次地阅读OP的查询,你就会知道不需要第二次内连接
您也可以将sum(p.unseen) as comments
放在第一个select
本身,因为它还会根据q.id = tab.q_id questions_options
问题从, which by itself comes in the first inner join between
表中提问{{1 }} questions_options`。
希望它可以帮到你。