4 つのテーブル (アクティビティ、メモ、カテゴリ、user_entries) をクエリして、アクティビティまたはメモのいずれかである一致を探しています。私の開発データベースには、一致する 8 つのアクティビティと 2 つのメモがあります。代わりに、16 の結果が得られます。各アクティビティが複製されます。1 つの結果には最初のメモが含まれ、もう 1 つの結果には 2 番目のメモが含まれます。
これはそのままのクエリです。
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 の知識はよくなく、それを修正する方法がわかりません。
誰でも助けることができますか?
編集: 明確にするためにデータベースは、継続的な専門能力開発活動の記録です。メモ (紛らわしい名前ですが、私が書いたものではありません!) はアクティビティにリンクされていません: ユーザーが重要なイベントを記録するためにあります。
メモとアクティビティを同じページにリストする必要があります。可能であれば、1 つの DB クエリを実行したいと思います。そうでない場合は、2 つのクエリを実行して、2 つの結果配列を結合する必要があります。