複数のテーブルからすべての列を選択するクエリがありますが、同じ値の倍数が返されます (個別の値のみが必要です)。
このようなものをどのように組み込むことができますか?これを試してみると、まだ
Select Distinct A.*, B.*, C.*....
すべて (*) ではなく、列名を選択した場合にのみ個別に機能しますか? この参照では、すべてのテーブルにわたってではなく、列名を参照して区別されます。これを行う方法はありますか?
編集 - 以下に詳細を追加しました
申し訳ありませんが、私は自分のコンピューターに戻りました。また、クエリ自体が問題であり、Distinct はそれとは何の関係もないことに気付きました。
したがって、私のクエリの全体的な目標は、次のことを行うことです
- ユーザーが持っている友達のリストを生成する
- 友達を調べて、アクティビティを確認します (投稿、友達の追加など)。
- 友人とその活動のリストを日付順に表示します (Facebook の壁のようなものだと思います)。
これが私のテーブルです
update_id | update | userid | timestamp //updates table
post_id | post | userid | timestamp //posts table
user_1 | user_2 | status | timestamp //friends table
これが私のクエリです
SELECT U.* , P.* ,F.* FROM posts AS P
JOIN updates AS U ON P.userid = U.userid
JOIN friends AS F ON P.userid = F.user_2 or F.user_1
WHERE P.userid IN (
select user_1 from friends where user_2 = '1'
union
select user_2 from friends where user_1 = '1'
union
select userid from org_members where org_id = '1'
union
select org_id from org_members where userid = '1'
)
ORDER BY P.timestamp, U.timestamp, F.timestamp limit 30
私がこれで抱えている問題 (distinct に関連していると私は考えていました) は、テーブル Friends の要件を満たす値が見つかった場合、Posts テーブルの値も表示されることです。これは、SQL ステートメントの出力を表示しているときに、探している実際の値も表示されているときに、Posts 値が複数回表示されているように見えることを意味します。
出力は次のようになります (行の投稿値の違いに注意してください)
update_id | update | userid | timestamp | post_id | post | userid | timestamp | user_1 | user_2 | status | timestamp
1 | update1 | 1 | 02/01/2013 | 1 | post1| 1 | 2/02/2013| 1 | 2 | 1 | 01/30/2013
1 | update1 | 1 | 02/01/2013 | 2 | post2| 1 | 2/03/2013| 1 | 2 | 1 | 01/30/2013
ご覧のとおり、(update1 が両方とも表示されたため) 明確な問題があると思いましたが、クエリは実際には関係なくすべての値を選択します。Post テーブルで探している結果が得られますが、他のすべての値が返されます。そのため、PHP/HTML でテーブルを表示すると、Post 値が表示されますが、更新の複製も取得されます (この例のみ)。