Access数据库SQL查询:如何显示UnitID为0的产品关联数据
解决UnitID为0的记录无法显示的SQL写法
这问题我之前做项目时也碰到过,咱们先捋清楚原SQL的问题:你用的INNER JOIN只会返回两张表中UnitID完全匹配的记录——如果Product表的UnitID是0,但Unit表里没有这个ID值,这些记录就会被直接过滤掉,自然看不到。
要显示Product表中UnitID为0的记录,你需要把连接类型改成左连接(LEFT JOIN),让Product表作为主表,保留它的所有记录,即使Unit表没有对应的匹配项。修改后的SQL语句如下:
SELECT Unit.UnitID, Product.* FROM Product LEFT JOIN Unit ON Unit.UnitID = Product.UnitID
这样一来,Product里所有UnitID为0的记录都会被显示出来,只是Unit.UnitID列会显示为NULL(因为Unit表没有对应的行)。如果你希望这一列在没有匹配时直接显示Product的UnitID(也就是0),可以用COALESCE函数来处理,优化后的语句:
SELECT COALESCE(Unit.UnitID, Product.UnitID) AS UnitID, Product.* FROM Product LEFT JOIN Unit ON Unit.UnitID = Product.UnitID
COALESCE的作用是返回第一个非NULL的值,这样当Unit.UnitID为NULL时,就会显示Product.UnitID的数值啦。
内容的提问来源于stack exchange,提问作者narmafkar
相关产品推荐
相关产品推荐

