in嵌套循环会自动过滤掉重复的ID

以下查询结果会不同。是因为 in嵌套循环会自动过滤掉重复的ID

mysql> select count(*) from goods
-> where goodsid
-> in(SELECT goodsid FROM goodsatt WHERE cid=200);
+----------+
| count(*) |
+----------+
| 169039 |
+----------+
1 row in set (7.00 sec)

mysql> select count(*) from goods a,goodsatt b
-> where (a.goodsid=b.goodsid and b.cid=200);
+----------+
| count(*) |
+----------+
| 172083 |
+----------+
1 row in set (2.63 sec)



in嵌套循环会自动过滤掉重复的ID,举例:
以下查询会得到4条符合条件的记录,由于menu_id有重复值。

mysql> SELECT *
-> FROM lm_menu_att
-> WHERE att_id =200
-> LIMIT 0 , 30
-> ;
+---------+--------+
| menu_id | att_id |
+---------+--------+
| 363 | 200 |
| 359 | 200 |
| 364 | 200 |
| 364 | 200 |
+---------+--------+
4 rows in set (0.02 sec)

所以要是用这2种不同语句统计的话数据是会不同的。

mysql> select count(*) from lm_menu
-> where menu_id
-> in(SELECT menu_id FROM lm_menu_att WHERE att_id=200
+----------+
| count(*) |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from lm_menu a,lm_menu_att b
-> where (a.menu_id=b.menu_id and b.att_id=200);
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值