2012-05-24 96 views
0

我的問題是:如何在一個sql查詢中獲取不同的值?我想這一點:內部連接中的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」看不見的(讀)評論...

那麼,怎樣才能通過我把看不見的評論做到這一點數字....任何想法或建議...

+1

你已經消除了名爲「tab」的子查詢中的q_id字段,所以你當然不能再加入該字段。你可能希望'(選擇總和(p.unseen),來自questions_options的p.q_id作爲p組,通過q_id)選項卡' –

+0

嗨....是的,你是正確的..它顯示一些結果...但所有領域2 ,我只想爲那些有未閱讀評論的領域...謝謝 –

回答

2

我認爲法官心理是正確的。

您應該在子查詢中選擇「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.idquestions_options.q_id

嗯,這對你子查詢來說是一樣的故事。

在你的子查詢中,你可以定義一個SELECT語句FROM「questions_options」, ,它只返回SELECT後面的列/字段。

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

爲了能夠使用任何數據從你子查詢中,你將不得不SELECTquestions_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_idp.q_id你在你的子查詢中選擇。

+0

是工作正常...通過選擇q_id字段在子查詢....然後innerJoin tab.q_id ...謝謝約書亞。但我不明白這是如何工作,你能解釋它或編輯你的問題的細節......謝謝。 –

1

我不知道我是否正確,但我在這裏找到了一些東西。
如果你一次又一次讀取OP的查詢,U會知道不需要第二次內部連接。
你也可以在第一selectsum(p.unseen) as comments本身,因爲它也從questions_options表q.id = tab.q_id , which by itself comes in the first inner join between問題and questions_options`的基礎上提出。
希望它可以幫助你。

+0

你是對的Abhinav,但對於這種情況有不同的事情...... bcz我們把一些問題的評級放在option_value中,並且把註釋的註釋值放在評論中......所以這就是爲什麼它不能執行你所說的話。 ... –