2011-04-07 25 views
0

嗨,我通常打獵和睡覺的東西,直到我找到答案,但下面看似簡單的問題是完全迴避我。可以做一些與SQL加入聲明的幫助請

我有2個表,

TBL_Incidents

IncidentID 
IncidentDate 
IncidentReportedBy 
IncidentDescription 

TBL_Comments

CommentID 
CommentFromUser 
Comment 

有每起事件的多個意見。

我想從TBL_Incidents獲取所有來自特定用戶的意見。

我試過的所有連接都重複了事件,包括我確信會工作的左連接,例如

IncidentID | IncidentDate (+ all other TBL_Incident fields) | CommentID 
4 | ... | 2 
4 | ... | 3 
4 | ... | 5 
9 | ... | 12 
9 | ... | 13 

這就像我想的事件ID使用一組,但隨後它不會給我的信息的其餘部分從TBL_Incidents,因爲他們不是group by子句中。

a)有沒有人有任何想法我喋喋不休?

b)有誰知道這是否可能?

非常感謝。

+0

謝謝你們,確實評論表有一個IncidentID字段,很好的發現。我現在會嘗試你所有的建議。 – Casualbob 2011-04-07 17:04:13

回答

1

我看不到事件和評論有關。 TBL_Comments中是否有IncidentID?如果是這樣,那麼你將加入對IncidentID和過濾的CommentFromUser像這樣:

SELECT * 
FROM TBL_Incidents JOIN TBL_Comments ON TBL_Incidents.IncidentID = TBL_Comments.IncidentID 
WHERE TBL_Comments.CommentFromUser = UserID 

如果在TBL_Comments沒有IncidentID那麼就沒有足夠的信息提供給他們聯繫在一起......

小讀書理解失敗編輯:

假設你有ID和你只是打擊重複的,巴掌DISTINCT在那裏:

SELECT DISTINCT TBL_Incidents.* 
    FROM TBL_Incidents JOIN TBL_Comments ON TBL_Incidents.IncidentID = TBL_Comments.IncidentID 
    WHERE TBL_Comments.CommentFromUser = UserID 
+0

這大概是他正在做什麼來產生他的結果。正如他所指出的那樣,如果給定用戶有多條評論,這將爲單個事件產生多行。 – 2011-04-07 17:00:50

+0

謝謝戴夫,這很有道理。 – 2011-04-07 17:04:45

+0

皮特,你是一個天才,獨特的伎倆。我會爲你投票,但是因爲我剛剛註冊,所以我沒有聲望去做。再次感謝! – Casualbob 2011-04-07 17:19:56

0

怎麼樣THI S' (我假設表有一個IncidentID列加入上的評論,雖然你沒有指定。)

SELECT * FROM tbl_incidents 
    WHERE IncidentID IN (
    SELECT DISTINCT IncidentID 
     FROM tbl_comments 
     WHERE CommentFromUser = 'Casualbob' 
    ) 
0

只要用你的GROUP BY像你認爲你應該,但你未分組字段,你可以進行像MAX這樣的聚合。

MAXMIN對於說IncidentDate對於同一事件顯然是相同的,但將聚合函數應用到該字段允許將其返回而不被分組。

1
SELECT IndicentID, IncidentDate, IncidentReportedBy, IncidentDescription 
FROM TBL_Incidents I 
WHERE EXISTS (SELECT 1 FROM TBL_Comments C 
       WHERE C.IncidentID = I.IncidentID 
       AND C.CommentFromUser = 'YourUser') 

這假定TBL_Comments有IncidentID列,如果你以某種方式能夠做一個加入的,它必須(或有類似的東西)。

+0

和你一樣Andrew,非常感謝 – Casualbob 2011-04-07 17:29:37

1

表描述您在上面顯示未註明表如何根據相關描述......,讓我們說TBL_Comments具有一鍵父表...

TBL_Incidents 

IncidentID 
IncidentDate 
IncidentReportedBy 
IncidentDescription 

and TBL_Comments 

CommentID 
CommentFromUser 
Comment 
IncidentID -- parent key from TBL_Incidents. 

您的查詢將是...

select * from tbl_incidents inc 
where exists 
(select 1 from tbl_Comments com 
    where inc.incidentId = com.incidentID 
    and CommentFromUser = <<<input user_name>>> 
) 
+0

Rajesh,你的解決方案也可以,謝謝! – Casualbob 2011-04-07 17:28:50

0

如果你想從兩個表中看到數據,你必須接受來自父表的數據將被重複。這是因爲如果只有一個字段不同,則記錄不同。如果您只想在界面中顯示一次數據,您可以操縱應用程序顯示的方式,但您應該返回到您現在正在返回的內容。

或者,您可以將來自chiled表的所有數據分組到逗號分隔列表中。這是非常複雜的,通常不是一個非常高效的業務方式,如果您需要顯示子表中的多個字段,它的工作情況非常糟糕。