0

複数のテーブルからすべての列を選択するクエリがありますが、同じ値の倍数が返されます (個別の値のみが必要です)。

このようなものをどのように組み込むことができますか?これを試してみると、まだ

Select Distinct A.*, B.*, C.*....

すべて (*) ではなく、列名を選択した場合にのみ個別に機能しますか? この参照ではすべてのテーブルにわたってではなく、列名を参照して区別されます。これを行う方法はありますか?

編集 - 以下に詳細を追加しました

申し訳ありませんが、私は自分のコンピューターに戻りました。また、クエリ自体が問題であり、Distinct はそれとは何の関係もないことに気付きました。

したがって、私のクエリの全体的な目標は、次のことを行うことです

  1. ユーザーが持っている友達のリストを生成する
  2. 友達を調べて、アクティビティを確認します (投稿、友達の追加など)。
  3. 友人とその活動のリストを日付順に表示します (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 値が表示されますが、更新の複製も取得されます (この例のみ)。

4

4 に答える 4

0

私はあなたがこれを望んでいると思います:

select *
from tableA
union
select * 
from tableB
union
select * 
from tableC

これは、すべての HHS テーブルに同じ数の列があり、同じデータ型であると想定しています。そうではなく、特定の列を選択してそうする必要があります。

于 2013-02-03T09:21:39.347 に答える
0

結合、ユニオン (上記のように)、またはグループ化を使用できるため、クエリを実行しているテーブル間の接続が何であるかをもう少し説明すると簡単です...

于 2013-02-03T15:08:19.953 に答える
0

個別の * を選択すると、レコードを一意にする行を含むすべての行が選択されます。取得したものよりも優れたものが必要な場合は、select 句に個々の列名を入力する必要があります。

于 2013-02-02T21:50:00.507 に答える
0

更新された投稿には、JOIN 条件の 1 つが次のように表示されます。

JOIN friends AS F ON P.userid = F.user_2 OR F.user_1

これは次と同等です。

JOIN friends AS F ON (P.userid = F.user_2 OR F.user_1  != 0)

含めるつもりでなかった多くの行が含まれます。あなたはおそらく意図した:

JOIN friends AS F ON (P.userid = F.user_2 OR P.userid = F.user_1)
于 2013-02-03T22:10:06.200 に答える