0

我正在查询四个表(活动、注释、类别、user_entries)以查找活动或注释的匹配项。在我的开发数据库中,我有 8 个活动和 2 个匹配的注释:相反,我得到 16 个结果。每个活动都是重复的:一个结果包括第一个音符,另一个结果包括第二个。

这是目前的查询:

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`

我在这里查看了很多类似的问题(尤其是问题 7696248):但我尝试过的任何方法都没有奏效。尽管尝试了很多建议(有/没有 DISTINCT、有/没有 GROUP BY、许多连接类型等),但我每次都得到相同的结果:查询基本上有问题。我的SQL知识不好,我不知道如何解决它。

任何人都可以帮忙吗?

编辑:为清楚起见,该数据库是持续专业发展活动的记录。笔记(名称很混乱,但不是我的名字!)与活动无关:它们是供用户记录重大事件的——“由于交通事故,3 个月内没有完成 CPD”,等等。

我需要在同一页面上列出笔记和活动:如果可能,我更愿意运行一个数据库查询;如果不是,我将不得不运行两个查询并合并两个结果数组。

4

2 回答 2

0

如果要选择一列中的所有注释,可以使用GROUP_CONCAT其他聚合函数

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`
于 2013-05-09T11:16:17.027 回答
0

DISTINCT请尝试aid

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`
于 2013-05-09T10:56:22.457 回答