1. mysql> select * from goods;
  2. +----------+--------+----------------------------------------+
  3. | goods_id | cat_id | goods_name |
  4. +----------+--------+----------------------------------------+
  5. | 1 | 4 | KD876 |
  6. | 4 | 8 | 诺基亚N85原装充电器 |
  7. | 3 | 8 | 诺基亚原装5800耳机 |
  8. | 5 | 11 | 索爱原装M2卡读卡器 |
  9. | 6 | 11 | 胜创KINGMAX内存卡 |
  10. | 7 | 8 | 诺基亚N85原装立体声耳机HS-82 |
  11. | 8 | 3 | 飞利浦9@9v |
  12. | 9 | 3 | 诺基亚E66 |
  13. | 10 | 3 | 索爱C702c |
  14. | 11 | 3 | 索爱C702c |
  15. | 12 | 3 | 摩托罗拉A810 |
  16. | 13 | 3 | 诺基亚5320 XpressMusic |
  17. | 14 | 4 | 诺基亚5800XM |
  18. | 15 | 3 | 摩托罗拉A810 |
  19. | 16 | 2 | 恒基伟业G101 |
  20. | 17 | 3 | 夏新N7 |
  21. | 18 | 4 | 夏新T5 |
  22. | 19 | 3 | 三星SGH-F258 |
  23. | 20 | 3 | 三星BC01 |
  24. | 21 | 3 | 金立A30 |
  25. | 22 | 3 | 多普达Touch HD |
  26. | 23 | 5 | 诺基亚N96 |
  27. | 24 | 3 | P806 |
  28. | 25 | 13 | 小灵通/固话50元充值卡 |
  29. | 26 | 13 | 小灵通/固话20元充值卡 |
  30. | 27 | 15 | 联通100元充值卡 |
  31. | 28 | 15 | 联通50元充值卡 |
  32. | 29 | 14 | 移动100元充值卡 |
  33. | 30 | 14 | 移动20元充值卡 |
  34. | 31 | 3 | 摩托罗拉E8 |
  35. | 32 | 3 | 诺基亚N85 |
  36. | 33 | 4 | 金立910浪漫镶砖手机 |
  37. +----------+--------+----------------------------------------+
  38. 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)