繁体   English   中英

Oracle SQL案例,比较不同表和联接中的列

[英]Oracle SQL Cases, Comparing Columns in Different Tables and Joins

说明:

  • 选择列ENameVehicleName
  • 如果EName不拥有车辆,则显示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列中的员工的EmpVehicle.EmpNo

您如何编写一个案例,查看Emp.EmpNo列中的员工编号是否不在EmpVehicle.EmpNo列中,并且在显示的VehicleName是否返回Null?

你应该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

您可以使用左连接,这样您就可以看到没有车辆的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为null以选择没有车辆的emp.EName

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM