关于SQL查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | SELECT s.shop_id, s.shop_name, s.shop_desc, s.shop_addr, s.phone, s.shop_img, s.priority, s.create_time, s.last_edit_time, s.enable_status, s.advice, a.area_id, a.area_name, sc.shop_category_id, sc.shop_category_name FROM tb_shop s, tb_area a, tb_shop_category sc WHERE s.area_id=a.area_id AND s.shop_category_id = sc.shop_category_id AND s.shop_id = 1 |
老师你好,我测试过程中发现一个问题,我的表中有一个数据没有shop_category_id,然后我用上面这段SQL查询的时候得到的是空,查询其他的行是正常的,当我将shop_category_id补上以后,执行同样的查询就可以查到了,我想不明白这是为什么,麻烦老师看一下谢谢
正在回答 回答被采纳积分+1
同学你好,
1、同学要首先明白这个sql语句的含义:表示通过店铺id查询店铺信息。
2、这里的这个sql语句有三个限定条件,分别是:s.area_id=a.area_id 和s.shop_category_id = sc.shop_category_id 和 s.shop_id = 1,这里同学编写的语句中限定店铺id为1,也就只有一条数据,并且店铺表中的shop_category_id为null,所以也就没有与分类表匹配值相等的数据,所以查询出来为null。
例如:
这里同学可以尝试将限定店铺id的条件删除。则就可以查询出其他匹配的数据,如:
老师将shop_category_id置为null,如:
3、老师这里所描述的外键查询,表示进行等值连接,查询数据,而不是进行约束查询哦!
4、这里使用left join的结果会与当前sql的结果不一致,以为left join表示左连接,也就是以左表为基准,右表进行匹配,会将null的值进行查出,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | SELECT s.shop_id, s.shop_name, s.shop_desc, s.shop_addr, s.phone, s.shop_img, s.priority, s.create_time, s.last_edit_time, s.enable_status, s.advice, a.area_id, a.area_name, sc.shop_category_id, sc.shop_category_name FROM tb_shop s left join tb_area a on s.area_id=a.area_id left join tb_shop_category sc on s.shop_category_id = sc.shop_category_id where s.shop_id = 1 |
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧