我正在尝试查找两个表,其中tableA具有来自tableB的ID并让它返回tableB的名称,但如果ID为NULL,则返回NULL。截至目前,我有:
SELECT vehicle.Id, vehicle.Registration, (case when vehicle.ChecklistId != NULL then
checklist.Name else NULL end) FROM vehicle, checklist WHERE vehicle.ChecklistId =
checklist.Id OR vehicle.ChecklistId IS NULL"
然而,这只是没有返回,因为清单表中目前没有任何内容。我错过了什么或完全做错了吗?
答案 0 :(得分:0)
您需要使用LEFT OUTER JOIN
SELECT vehicle.Id, vehicle.Registration, (case when vehicle.ChecklistId != NULL then
checklist.Name else NULL end) FROM vehicle LEFT OUTER JOIN checklist
ON vehicle.ChecklistId =checklist.Id OR vehicle.ChecklistId IS NULL
答案 1 :(得分:0)
试试这个:
SELECT vehicle.Id, vehicle.Registration, checklist.Name FROM vehicle LEFT JOIN checklist ON vehicle.ChecklistId =checklist.Id OR vehicle.ChecklistId IS NULL
答案 2 :(得分:0)
只需选择值:
select
vehicle.id,
vehicle.registration,
(select checklist.name from checklist where checklist.id = vehicle.checklistid )
from vehicle;
或使用外部联接:
选择
vehicle.id,
vehicle.registration,
checklist.name
from vehicle
left join checklist on checklist.id = vehicle.checklistid;
编辑:至于你的陈述:你不应该使用旧的连接语法,只列出以逗号分隔的表。它容易出错。你在做什么是这样的:
在您的情况下,清单为空,因此两个结果集都为空。但是,如果清单中有匹配项,那么您将获得太多记录,因为您将使用清单表交叉加入ChecklistId为空的所有车辆。