簡體   English   中英

多行僅獲取特定值

[英]Multiple rows get only specific values

感覺這應該是一個相當簡單的問題,我正在努力尋找解決方案。

我們有三個表來創建一個問答系統。 一個是問題,另一個是答案,然后第三個是我們存儲用戶選擇的最終位置。

問題表

QuestionID Question 
1          What is your favorite color?
2          Where were you born?

答案表

AnswerID QuestionID Answer
1        1          Blue
2        1          Green
3        1          Yellow
4        2          USA
5        2          Africa

答案存儲表

AnswerStoreID QuestionID AnswerID UserID
1             1          1        1
2             1          2        1
3             2          4        2
4             2          5        2
5             1          1        3

我想找到回答 QuestionID 1 作為 AnswerID 1QuestionID 2 作為 AnswerID 4 的 UserID。

以為會像這樣簡單

SELECT UserID
FROM Question Q
INNER JOIN Answer A ON A.QuestionID = A.QuestionID
INNER JOIN AnswerStore AS ON AS.AnswerID = A.AnswerID
WHERE (AS.AnswerID = 1 AND AS.QuestionID = 1)
AND (AS.AnswerID = 2 AND AS.QuestionID = 4)

但這沒有任何效果。 當用OR替換兩個 where 語句之間的AND ,得到的結果沒有這兩個答案,盡管這也是不希望的。 我只想要那些回答這兩個問題的用戶。

然后我做了一個帶有一些不同連接的查詢來對每個問題進行查詢,但覺得這個問題太復雜和繁重了,我想多了。 這個問題有更簡單的解決方案嗎?

- - 編輯 - -

實際上,您甚至不需要原始查詢中的 JOIN:

SELECT t.UserID
FROM AnswerStore AS t
WHERE (t.AnswerID = 1 AND t.QuestionID = 1)
   OR (t.AnswerID = 2 AND t.QuestionID = 4)
GROUP BY t.UserID
HAVING COUNT(*) = 2

---- 原始完整答案 ----

這實際上是一個相當普遍的問題,每周出現幾次。 不幸的是,很難制定一個可重復/可搜索的問題以供參考。

SELECT UserID
FROM Question Q
INNER JOIN Answer A ON A.QuestionID = A.QuestionID
INNER JOIN AnswerStore AS ON AS.AnswerID = A.AnswerID
WHERE (AS.AnswerID = 1 AND AS.QuestionID = 1)
   OR (AS.AnswerID = 2 AND AS.QuestionID = 4)
GROUP BY UserID
HAVING COUNT(*) = 2

一般形式為:

SELECT A.a_id
FROM A
INNER JOIN B ON A.a_id = B.a_id
WHERE B.something IN ([list])
GROUP BY a_id
HAVING COUNT(*) = [length of list]
-- or in cases where B matches may be non-unique
-- HAVING COUNT(DISTINCT B.something) = [length of list] 

您實際上是在查看兩組數據,將 QuestionID 1 回答為 AnswerID 1 的 UserID,以及將 QuestionID 2 回答為 AnswerID 4 的 UserID。因此,您可以將這些集連接在一起以查找在兩組數據中的 UserID:

SELECT UserID
FROM AnswerStore as1 INNER JOIN AnswerStore as2 ON as1.UserID = as2.UserID
AND as1.QuestionID = 1 AND as1.AnswerID = 1
AND as2.QuestionID = 2 AND as2.AnswerID = 4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM