Stop SQL returning the same result twice in a JOIN
        Posted  
        
            by 
                nbs189
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by nbs189
        
        
        
        Published on 2012-08-31T14:53:50Z
        Indexed on 
            2012/08/31
            15:39 UTC
        
        
        Read the original article
        Hit count: 227
        
sql
I have joined together several tables to get data i want but since I am new to SQL i can't figure out how to stop data being returned more than once.
her's the SQL statement;
SELECT
   T.url,
   T.ID,
   S.status,
   S.ID,
   E.action,
   E.ID,
   E.timestamp
FROM tracks T, status S, events E
WHERE S.ID AND T.ID = E.ID
ORDER BY E.timestamp DESC
The data that is returned is something like this;
+----------------------------------------------------------------+
| URL | ID | Status | ID | action               | ID | timestamp |
+----------------------------------------------------------------+
| T.1 | 4  | hello  | 4  | has uploaded a track | 4  | time      |
| T.2 | 3  | bye    | 3  | has some news        | 3  | time      |
| t.1 | 4  | more   | 4  | has some news        | 4  | time      |
+----------------------------------------------------------------+
That's a very basic example but does outline what happens. If you look at the third row the URL is repeated when there is a different status.
This is what I want to happen;
+-------------------------------------------------------+
| URL or Status | ID | action               | timestamp |
+-------------------------------------------------------+
| T.1           | 4  | has uploaded a track | time      |
| hello         | 3  | has some news        | time      |
| bye           | 4  | has some news        | time      |
+-------------------------------------------------------+
Please notice that the the url (in this case the mock one is T.1) is shown when the action is has uploaded a track. This is very important. The action in the events table is inserted on trigger of a status or track insert. If a new track is inserted the action is 'has uploaded a track' and you guess what it is for a status. The ID and timestamp is also inserted into the events table at this point.
Note: There are more tables that go into the query, 3 more in fact, but I have left them out for simplicity.
© Stack Overflow or respective owner