MySQL如何查询食物表中搭配食物名称?含NULL值处理
查询食物及其搭配名称(保留NULL值)
现有FOOD表结构及数据如下:
ID | NAME | GOES_WELL_WITH 1 | APPLE | 3 2 | BANANA | NULL 3 | ORANGE | 2 4 | BLUEBERRY | 5 5 | GRAPE | 4 6 | LEMON | 1
需求:查询每个食物的名称,以及与之搭配的食物名称;当GOES_WELL_WITH为NULL时,对应搭配名称也为NULL(比如香蕉的情况)。
想要保留NULL值,必须使用左自连接(LEFT JOIN),内连接(INNER JOIN)会自动过滤掉GOES_WELL_WITH为NULL的行,这就是之前无法保留NULL的原因。
正确SQL语句
SELECT f1.NAME AS food_name, f2.NAME AS paired_food_name FROM FOOD f1 LEFT JOIN FOOD f2 ON f1.GOES_WELL_WITH = f2.ID;
执行结果
执行后会得到如下结果,完美保留了香蕉的NULL搭配:
food_name | paired_food_name APPLE | ORANGE BANANA | NULL ORANGE | BANANA BLUEBERRY | GRAPE GRAPE | BLUEBERRY LEMON | APPLE
核心逻辑:左连接以左表(f1,所有食物)为基础,即使右表(f2,搭配的食物)没有匹配的行(即f1.GOES_WELL_WITH为NULL时),也会保留左表的该行,并且右表对应的字段显示为NULL,完全符合需求。
内容的提问来源于stack exchange,提问作者John_Cena
相关产品推荐
相关产品推荐

