0

LEFT JOINS を使用して複数のテーブルを結合する SQL クエリがあります。クエリから取得されたデータは 2 倍になります。

クエリ;

SELECT 

        T.url AS track_url,
        T.name AS track_name,

        S.status,

        E.action,
        E.ID,
        E.timestamp,

        F.ID AS follower_ID,
        F.follows_ID,

        A.name,
        A.DP,
        A.url AS artist_url



      FROM events E

      LEFT JOIN 
      TRACKS T
      ON T.ID = E.ID AND E.action = 'has uploaded a track.'

      LEFT JOIN 
      STATUS S
      ON S.ID = E.ID AND E.action = 'has some news.'

      LEFT JOIN 
      ARTISTS A
      ON A.ID = E.ID


      LEFT JOIN artist_follows F
      ON F.follows_ID = E.ID


      WHERE E.ID != '2'  AND F.ID = '2'

     ORDER BY E.timestamp DESC LIMIT 5

結果 ( statusANDからのデータのみeventsが表示されます);

+--------------------------------------------------------------------+
| status | action        | ID | timestamp | follower_id | follows_id |
+--------------------------------------------------------------------+
| test   | has some news.| 3  | T.1       | 4           | 3          |
| another| has some news.| 3  | T.1       | 4           | 3          |
| test   | has some news.| 3  | T.2       | 4           | 3          |
| another| has some news.| 3  | T.2       | 4           | 3          |
+--------------------------------------------------------------------+

ご覧のとおり、データstatusは 2 倍になっています。T.2は状態anotherに属し、T.1 は状態に属しますtest。表示されているのは、 からのデータstatusが 2 回表示されていることです。1 回はT.1'sからのデータ セットで、もう 1 回は からeventsT.2'sデータ セットですevents。これは、ID が複数のステータスを投稿した場合、イベント テーブル内のその ID のすべてのデータとステータスが結合されることを意味します。

4

1 に答える 1

0

私は通常のコンピューターを使用していないため、テストできませんが、参加するときに置き換えるべきではありませんANDWHERE?

于 2012-09-01T11:17:30.760 に答える