2016-09-19 53 views
1

說明:的Oracle SQL案例,在不同的表比較列和聯接

  • 如果EName不擁有車輛選擇列ENameVehicleName
  • ,顯示Null作爲VehicleName

相關的SQL表和列:

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

我現在的嘗試是:

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

上述查詢工作在這個意義上,它會顯示所有員工姓名與EmpVehicle.VehicleIdVehicle.VehicleName進入但我不知道如何將沒有車輛的員工姓名包括在內。

我已經能夠確定不會在Emp.EmpNo列中的所有EmpNo值在EmpVehicle.EmpNo列和我上面的查詢只顯示一個員工,其員工數量在EmpVehicle.EmpNo列的名稱。

如何編寫一個案例,查看Emp.EmpNo列中的員工編號是否不在EmpVehicle.EmpNo列中,並且在顯示的VehicleName中是否不返回Null?

回答

3

你應該LEFT JOIN讓您Emp表中的數據不匹配您的INNER JOIN

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

This Works!對不起,原來是因爲沒有使用正確的連接而變得愚蠢。我認爲查詢會隱藏行有一個列條目時,NULL值沒有專門設置爲NULL,無論使用的連接。謝謝! – BrightHalo

0

您可以使用LEFT JOIN,所以你可以看到,沒有車輛

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

併爲您EmpVehicle.EmpNo是空的選擇沒有車輛

SELECT Emp.EName 
FROM Emp 
LEFT JOIN EmpVehicle ON Emp.EmpNo = EmpVehicle.EmpNo 
WHERE EmpVehicle.EmpNo is null 
的emp.EName