mysql> select * from goods;+----------+--------+----------------------------------------+| goods_id | cat_id | goods_name |+----------+--------+----------------------------------------+| 1 | 4 | KD876 || 4 | 8 | 诺基亚N85原装充电器 || 3 | 8 | 诺基亚原装5800耳机 || 5 | 11 | 索爱原装M2卡读卡器 || 6 | 11 | 胜创KINGMAX内存卡 || 7 | 8 | 诺基亚N85原装立体声耳机HS-82 || 8 | 3 | 飞利浦9@9v || 9 | 3 | 诺基亚E66 || 10 | 3 | 索爱C702c || 11 | 3 | 索爱C702c || 12 | 3 | 摩托罗拉A810 || 13 | 3 | 诺基亚5320 XpressMusic || 14 | 4 | 诺基亚5800XM || 15 | 3 | 摩托罗拉A810 || 16 | 2 | 恒基伟业G101 || 17 | 3 | 夏新N7 || 18 | 4 | 夏新T5 || 19 | 3 | 三星SGH-F258 || 20 | 3 | 三星BC01 || 21 | 3 | 金立A30 || 22 | 3 | 多普达Touch HD || 23 | 5 | 诺基亚N96 || 24 | 3 | P806 || 25 | 13 | 小灵通/固话50元充值卡 || 26 | 13 | 小灵通/固话20元充值卡 || 27 | 15 | 联通100元充值卡 || 28 | 15 | 联通50元充值卡 || 29 | 14 | 移动100元充值卡 || 30 | 14 | 移动20元充值卡 || 31 | 3 | 摩托罗拉E8 || 32 | 3 | 诺基亚N85 || 33 | 4 | 金立910浪漫镶砖手机 |+----------+--------+----------------------------------------+32 rows in set (0.02 sec)
1. where型子查询
内层sql的返回值在where后作为条件表达式的一部分
mysql> select goods_id, cat_id, goods_name from goods where goods_id in (select max(goods_id) from goods group by cat_id);
+----------+--------+----------------------------------------+
| goods_id | cat_id | goods_name |
+----------+--------+----------------------------------------+
| 6 | 11 | 胜创KINGMAX内存卡 |
| 7 | 8 | 诺基亚N85原装立体声耳机HS-82 |
| 16 | 2 | 恒基伟业G101 |
| 23 | 5 | 诺基亚N96 |
| 26 | 13 | 小灵通/固话20元充值卡 |
| 28 | 15 | 联通50元充值卡 |
| 30 | 14 | 移动20元充值卡 |
| 32 | 3 | 诺基亚N85 |
| 33 | 4 | 金立910浪漫镶砖手机 |
+----------+--------+----------------------------------------+
9 rows in set (0.01 sec)
2. from型子查询
内层sql查询结果,作为一张表,供外层的sql语句再次查询
mysql> select tmp.goodsId, tmp.catId, tmp.goodsName from
(select goods_id as goodsId, cat_id as catId, goods_name as goodsName from goods where goods_id in (select max(goods_id) from goods group by cat_id))
as tmp where tmp.goodsName like '%充值%';
+---------+-------+--------------------------------+
| goodsId | catId | goodsName |
+---------+-------+--------------------------------+
| 26 | 13 | 小灵通/固话20元充值卡 |
| 28 | 15 | 联通50元充值卡 |
| 30 | 14 | 移动20元充值卡 |
+---------+-------+--------------------------------+
3 rows in set (0.00 sec)
