[英]Oracle SQL Cases, Comparing Columns in Different Tables and Joins
说明:
EName
和VehicleName
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.VehicleId
和Vehicle.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.