我正在查询四个表(活动,注释,类别,user_entries),寻找与EITHER活动或备注相匹配的表。在我的开发数据库中,我有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`
我在这里看了很多类似的问题,(特别是question 7696248):但我尝试过的任何事都没有效果。尽管尝试了许多建议(有/没有DISTINCT,有/无GROUP BY,许多连接类型等),我每次都得到相同的结果:查询有一些基本上错误。我对SQL的了解并不好,我不知道如何解决它。
有人可以帮忙吗?
编辑:为了清晰 该数据库是持续专业发展活动的记录。注释(令人困惑地命名,但不是我!)与活动无关:用户可以记录重大事件 - “因道路交通事故而3个月没有做CPD”,等等。
我需要在同一页面上列出注释和活动:如果可能的话,我宁愿运行一个数据库查询;如果不是,我将不得不运行两个查询并合并两个结果数组。
答案 0 :(得分: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`
答案 1 :(得分:0)
如果您想在一列中选择所有备注,可以使用GROUP_CONCAT
或other 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`