2013-05-09 179 views
0

我正在查詢四個表(活動,註釋,類別,user_entries)查找是否有活動或註釋的匹配項。在我的開發數據庫中,我有8項活動和2項符合條件的記錄:取而代之的是16項結果。每個活動都是重複的:一個結果包括第一個音符,另一個包括第二個音符。MySQL查詢給出重複結果

這是查詢,因爲它主張:

SELECT a.`aid`, a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, n.`nid`, n.`notename`, n.`dates` 
FROM activities a 
INNER JOIN user_entries u ON a.`aid` = u.`aid_FK` 
INNER JOIN categories c ON a.`category` = c.`cat` 
INNER JOIN notes n ON u.`mem_no_FK` = n.`mem_no_FK` 
WHERE u.`mem_no_FK` = 1995 
GROUP BY a.`aid`, a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, n.`nid`, n.`notename`, n.`dates` 
ORDER BY `date` 

我已經在好幾個類似的問題在這裏看着,(尤其是question 7696248):但沒有我試過任職。儘管嘗試了很多建議(使用/不使用DISTINCT,使用/不使用GROUP BY,許多連接類型等),但每次都得到相同的結果:查詢有一些基本錯誤。我的SQL知識不好,我不知道如何解決它。

任何人都可以幫忙嗎?

編輯:澄清 該數據庫是持續專業發展活動的記錄。註釋(被混淆地命名,但不是由我!)與活動無關:用戶可以記錄重大事件 - 「由於交通事故導致3個月內沒有完成CPD」等等。

我需要列出筆記和活動在同一頁面上:如果可能,我寧願運行一個數據庫查詢;如果不是,我將不得不運行兩個查詢併合並兩個結果數組。

+0

請你能提供從所有三個表的示例數據? – 2013-05-09 10:30:08

+1

make sqlfiddle http://sqlfiddle.com/ – luksch 2013-05-09 10:31:14

+0

這是意圖行爲:你在援助和筆記上分組,你還期望什麼?你想如何在一行中表示不同的音符?此外,由於您選擇的內容完全相同,因此GROUP BY條款是多餘的,因此後者無用。 – dtech 2013-05-09 11:09:57

回答

0

請嘗試DISTINCTaid

SELECT DISTINCT(a.`aid`), a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, n.`nid`, n.`notename`, n.`dates` 
FROM activities a 
INNER JOIN user_entries u ON a.`aid` = u.`aid_FK` 
INNER JOIN categories c ON a.`category` = c.`cat` 
INNER JOIN notes n ON u.`mem_no_FK` = n.`mem_no_FK` 
WHERE u.`mem_no_FK` = 1995 
GROUP BY a.`aid`, a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, n.`nid`, n.`notename`, n.`dates` 
ORDER BY `date` 
+0

謝謝,但我已經嘗試過了:像以前一樣顯示重複項。 – hnmcc 2013-05-09 11:24:18

+0

請提供'SQL SCHEMA' ... – 2013-05-09 11:58:32

0

如果你想在一列中選擇所有的筆記,你可以使用GROUP_CONCATother aggregate functions

SELECT a.`aid`, a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, GROUP_CONCAT(n.`notename` SEPARATOR ' ') as notes 
FROM activities a 
JOIN user_entries u ON a.`aid` = u.`aid_FK` 
JOIN categories c ON a.`category` = c.`cat` 
JOIN notes n ON u.`mem_no_FK` = n.`mem_no_FK` 
WHERE u.`mem_no_FK` = 1995 
GROUP BY a.`aid` 
ORDER BY `date` 
+0

這確實會返回8個活動,但不是筆記。 – hnmcc 2013-05-09 11:25:16

+0

請看我的(和其他評論)您的問題。我們現在無法充分回答它... – dtech 2013-05-09 14:39:52