为了账号安全,请及时绑定邮箱和手机立即绑定

多表删除问题

输入命令: SELECT a.goods_id,a.goods_name FROM tdb_goods AS a LEFT JOIN (SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING COUNT(goods_name)>1) AS b  ON a.goods_name = b.goods_name ;

显示的是tdb_goods 的所有选项

但是在后面加上WHERE a.goods_id > b.goods_id,就只显示两条结果

 命令:SELECT a.goods_id,a.goods_name FROM tdb_goods AS a LEFT JOIN (SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING COUNT(goods_name)>1) AS b  ON a.goods_name = b.goods_name WHERE a.goods_id > b.goods_id;

结果:

+----------+-------------------------+

| goods_id | goods_name              |

+----------+-------------------------+

|       26 |  HMZ-T3W 头戴显示设备

|       27 | 玄龙精英版 笔记本散热器

+----------+-------------------------+

2 rows in set (0.00 sec)

前后只是差了一个条件,如果把LEFT JION 改成RIGHT JION 或者 INNER JION 我都可以理解,就是LEFT JION 不明白,求各位大神指点迷津。

正在回答

3 回答

因为where相当于对链接后的呈现的表再进行了一步操作:条件就是只展示a.goods_id>b.goods_id。根据子查询生成的b表本身只有两条数据(这两条数据本身就是tdb_goods中的重复数据,a中一定也存在而且一共为4条),其中符合进一步筛选条件的只有两条。

1 回复 有任何疑惑可以回复我~
#1

慕姐6048975 提问者

感觉比较明白了,谢谢!
2016-12-05 回复 有任何疑惑可以回复我~

我也这里不明白啊,求解答啊。我也做了你的这个实验发现是这样的。一直想不明白。

0 回复 有任何疑惑可以回复我~
#1

小一的学习笔记

不就是因为有了一个where语句所以又进行了一次过滤,所以两种的结果是一样的。但个人更倾向于INNER JOIN 因为返回的是两张表相同的数据
2017-02-18 回复 有任何疑惑可以回复我~

LEFT join 左连接显示结果为a表中和b表中的公有字段以及a中的内容

0 回复 有任何疑惑可以回复我~
#1

慕姐6048975 提问者

上下两条命令,为什么后面多了一个where a.goods_id>b.goods_id 结果就差那么远呢?
2016-12-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396727    人
  • 解答问题       3497    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

多表删除问题

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号