检查两个表,其中1个结果在mySQL中可以为NULL

时间:2014-04-10 10:38:46

标签: mysql sql null

我正在尝试查找两个表,其中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"

然而,这只是没有返回,因为清单表中目前没有任何内容。我错过了什么或完全做错了吗?

3 个答案:

答案 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;

编辑:至于你的陈述:你不应该使用旧的连接语法,只列出以逗号分隔的表。它容易出错。你在做什么是这样的:

  • 使用匹配的核对清单(如果有)
  • 加入vehicle.ChecklistId为非NULL的每辆车
  • 使用所有核对清单
  • 加入vehicle.ChecklistId为空的每辆车

在您的情况下,清单为空,因此两个结果集都为空。但是,如果清单中有匹配项,那么您将获得太多记录,因为您将使用清单表交叉加入ChecklistId为空的所有车辆。