2017-12-29 20 views
1

Ich habe eine Tabelle A, die Baumspalten, ID, Benutzer-IDs und Fahrzeug-ID enthält. Und eine Tabelle B, die Fahrzeug-ID und Fahrzeugname enthält.wie man einen äußeren Join in mysql

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 | 
    ------------------- 

ein Benutzer-ID, muß ich alle Fahrzeugnamen bekommen, die nicht mit Tabelle A überein Ich habe versucht, Outer-Joins, aber ich kann nicht schaffen, zu tun, um die Informationen zu erhalten, die ich brauche, . Zum Beispiel: Gegeben Benutzer ID 1, die Abfrage sollte Auto und Rocket zurückgeben.

Dank im Voraus

Antwort

1

Das ist einfach genug not in oder not exists mit:

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

Arbeitete wie ein Charme. Daran habe ich nicht gedacht. –

0

ich auch ein Cross-Join der Verwendung gedacht und konnte den Ausgang für den Fall, Sie sind bequemer bekommen, verbinden Logik.

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; 

Zuerst habe ich alle möglichen Kombinationen von USER_ID x VEHICLE_ID durch ein Kreuz verbinden und verwenden diese Tabelle in einem LEFT JOIN Aufzeichnungen zu ziehen, für die keine Übereinstimmung gibt.

Verwandte Themen