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
結果 ( status
ANDからのデータのみ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 回は からevents
のT.2's
データ セットですevents
。これは、ID が複数のステータスを投稿した場合、イベント テーブル内のその ID のすべてのデータとステータスが結合されることを意味します。