系統:Windows7的,Access 2003中,.mdb文件,C#語言,2010 VS的MS Access - SQL查詢問題
我在做與OleDbCommand的查詢,所以我寫在一個字符串完整的SQL查詢。
Table Survey (Id)
Table Questions (Id,IdSurvey)
Table Answers (Id,IdQuestion)
表簡化爲只顯示相關的數據
假設1個調查1..1問題
假設1題有0到n回答
我只想選擇問題3中具有答案1和/或2的調查,我該怎麼做?
電流(差)的解決方案:
SELECT surv.Name FROM Survey surv WHERE
(1 IN (SELECT answ.Number FROM Answers answ, Questions quest
WHERE quest.Id = 3 AND quest.IdSurvey = surv.Id)
AND/OR
(2 IN (SELECT answ.Number FROM Answers answ, Questions quest
WHERE quest.Id = 3 AND quest.IdSurvey = surv.Id)))
這看起來像廢話,所以我將不勝感激幫助。
在此先感謝。
編輯
更好的解決方案,我想出了:
對於1或2,這裏給出的解決方案是足夠的(非常簡單的邏輯表達式)。謝謝你們
對於1和2,我已經創造了另一種解決方案,看起來還挺好的,我認爲(再次,對於非常簡單的邏輯表達式)
SELECT surv.Name FROM Survey surv WHERE EXISTS
(SELECT COUNT(*) FROM Answers answ, Questions quest
WHERE quest.Id = 3 AND answ.Number IN (1,2) HAVING COUNT(*) > 1)
的 「」 在HAVING子句意味着至少需要兩行,並且由於答案不會針對相同的問題重複,因此這意味着至少針對所查詢的問題存在回答。
那麼,與更復雜的邏輯表達式處理時,像(1和(2 OR(4和(6或7)))),真相OR溶液和AND溶液都是壞是,它是非常不可能的,這樣的複雜性將需要,但我想要安全。對我來說,理想的解決辦法是這樣的:
SELECT surv.Name FROM Survey surv WHERE
(1 IN (SELECT answ.Number FROM Answers answ, Questions quest
WHERE quest.Id = 3 AND quest.IdSurvey = surv.Id) AS CANT_DO_THIS
AND/OR
(2 IN CANT_DO_THIS) AND/OR 5 IN CANT_DO_THIS AND/OR 3 NOT IN CANT_DO_THIS)
感謝您的回答。 正如我所描述的,一個問題有很多答案,所以我相信您的解決方案可能會多次返回相同的問卷。請注意,這引入了「和」問題,我怎麼能用一個「IN」來做到這一點?似乎不可能。 – 2010-08-09 04:35:33
如果每個問題都通過外鍵加入到單個調查中,並且每個答案都通過外鍵連接回單個問題,那麼SQL應該爲您提供正確的結果。我不確定您的模型是否將每個答案與單個_question_相關聯,這是使三個表聯合工作的必要條件。 – 2010-08-09 04:45:59
問題是許多答案都加入到單個問題中。因此,相同的調查和相同的問題在N行上重複。 這是一個'1 x 0..n'的關係。另外,如何做「1和2」,而不是「1或2」? (您的解決方案適用於「1或2」,IN運算符) – 2010-08-09 13:28:58