Lucas.Fradusco
Lucas.Fradusco

Reputation: 39

how to perform an outer join in mysql

I have a table A that contains tree columns, id, users ids and vehicle id. And a table B that contains vehicleid, and vehicle name.

Table A
    ---------------------------
    | Id | User_id |Vehicle_id| 
    ---------------------------
    |  1 |     1   |    2     |
    |  2 |     1   |    3     |
    |  3 |     1   |    4     |
    |  4 |     2   |    2     |
    |  5 |     2   |    3     |
    |  6 |     4   |    5     |
    ---------------------------

Table B  
    -------------------
    | Id |Vehicle_name| 
    -------------------
    |  1 |   Car      | 
    |  2 |   Bike     |
    |  3 |   Plane    |
    |  4 |   Boat     | 
    |  5 |   Rocket   |  
    -------------------

Given a user id, I need to get all vehicle names, that doesn't match with table A. I've tried Outer joins, but I can't manage to do get the info that i need. For example: Given user id 1, the query should return Car and Rocket.

thanks in advance

Upvotes: 1

Views: 44

Answers (2)

Vash
Vash

Reputation: 1787

I also thought of using a cross join and was able to get the output in case you are more comfortable with join logic.

SELECT CJOIN.USER_ID, CJOIN.VEHICLE_ID, CJOIN.VEHICLE_NAME
FROM
(SELECT DISTINCT A.USER_ID, B.ID AS VEHICLE_ID, B.VEHICLE_NAME FROM TABLE_A A CROSS JOIN TABLE_B B) CJOIN
LEFT JOIN
TABLE_A D
ON CJOIN.USER_ID = D.USER_ID AND CJOIN.VEHICLE_ID = D.VEHICLE_ID
WHERE D.USER_ID IS NULL AND D.VEHICLE_ID IS NULL;

First, I got all possible combinations of USER_ID x VEHICLE_ID by a cross join and used this table in a left join to pull records for which there is no match.

Upvotes: 0

Gordon Linoff
Gordon Linoff

Reputation: 1269503

This is simple enough using not in or not exists:

select b.*
from b
where not exists (select 1
                  from a
                  where a.vehicle_id = b.id and a.user_id = @a_user_id
                 );

Upvotes: 1

Related Questions