2016-09-19 3 views
1

Anleitung:Oracle SQL Hüllen Vergleich Spalten in verschiedenen Tabellen und Joins

  • Spalten auswählen EName und VehicleName
  • Wenn EName kein Fahrzeug nicht besitzt, angezeigt als VehicleName Null.

Relevante SQL-Tabellen und Spalten:

Table   | Columns 
--------------+------------------------- 
Emp   | EmpNo, EName 
Vehicle  | VehicleId, VehicleName 
EmpVehicle | EmpNo, VehicleId 

Mein aktueller Versuch ist:

SELECT Emp.EName, Vehicle.VehicleName 
FROM Emp 
INNER JOIN EmpVehicle ON Emp.EmpNo = EmpVehicle.EmpNo 
INNER JOIN Vehicle ON EmpVehicle.VehicleId = Vehicle.VehicleId 

Die obige Abfrage im Sinne arbeitet, dass sie alle Namen Mitarbeiter zeigen mit einem EmpVehicle.VehicleId und Vehicle.VehicleName Eintrag aber ich habe keine Ahnung, wie man Namen von Mitarbeitern einfügt, die kein Fahrzeug mit Joins haben.

ich in der Lage gewesen, das zu bestimmen, nicht alle EmpNo Werte in der Emp.EmpNo Spalte in der EmpVehicle.EmpNo Spalte sind und dass meine obige Abfrage zeigt nur die Namen der Mitarbeiter, deren Personalnummer ist in der EmpVehicle.EmpNo Spalte.

Wie würden Sie einen Fall schreiben, die auf, wenn ein Mitarbeiter in Spalte sieht Emp.EmpNo ist nicht in Spalte EmpVehicle.EmpNo und wenn es nicht Null ist, zurückkehrt in den angezeigten VehicleName?

Antwort

3

Sie sollten LEFT JOIN halten Daten von Ihrem Emp Tabelle, die nicht auf Ihrem INNER JOIN überein:

SELECT Emp.EName, Vehicle.VehicleName 
FROM Emp 
LEFT JOIN EmpVehicle 
ON Emp.EmpNo = EmpVehicle.EmpNo 
LEFT JOIN Vehicle 
ON EmpVehicle.VehicleId = Vehicle.VehicleId 
+0

Das funktioniert! Entschuldigung, es stellte sich heraus, dass es so dumm war, die richtigen Joins nicht zu verwenden. Ich dachte, die Abfrage würde Zeilen ausblenden hatte einen Spalteneintrag, wenn ein NULL-Wert nicht speziell als NULL gesetzt wurde, unabhängig von der Join verwendet. Danke! – BrightHalo

0

Sie können linken Seite an, damit Sie die emp sehen, dass das Fahrzeug nicht

haben
SELECT Emp.EName, Vehicle.VehicleName 
FROM Emp 
LEFT JOIN EmpVehicle ON Emp.EmpNo = EmpVehicle.EmpNo 
LEFT JOIN Vehicle 
ON EmpVehicle.VehicleId = Vehicle.VehicleId 

Und für EmpVehicle.EmpNo überprüfen ist null für die emp.EName auswählen, die nicht Fahrzeug

SELECT Emp.EName 
FROM Emp 
LEFT JOIN EmpVehicle ON Emp.EmpNo = EmpVehicle.EmpNo 
WHERE EmpVehicle.EmpNo is null 
haben Sie
Verwandte Themen