MySQL在字段中使用select子查询(转)
2019-06-23 本文已影响0人
半路和尚怎么出家
大概的形式是这样的:
select a .*,(select b.another_field from b where a.id=b.aid) another_field from a where 1 limit 10;
下面还是以实例来说明,要不然不好理解,新建两张表,一张是商品表,另外一张是商品的评论表
商品表:
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_name` varchar(30) CHARACTER SET utf8 NOT NULL,
`price` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
评论表:
CREATE TABLE `comment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`entity_id` int(11) NOT NULL,
`content` varchar(100) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
然后插入一些数据:
INSERT INTO `product` (`id`, `product_name`, `price`) VALUES
(1, '肉松饼', 5),
(2, '可乐', 5),
(3, '鸡翅', 12),
(4, '杯子', 42);
INSERT INTO `comment` (`id`, `entity_id`, `content`) VALUES
(1, 1, '味道还不错'),
(2, 1, '还行啊'),
(3, 3, '很实用哦');
下面我们用子查询的方式来查出商品的信息以及每个商品的评论数量
SELECT product.*,
(select count(comment.id) from comment where product.id=comment.entity_id) comment_count FROM `product` limit 5;
查询结果:
id | product_name | price | comment_count |
---|---|---|---|
1 | 肉松本 | 5 | 2 |
2 | 可乐 | 5 | 0 |
3 | 鸡翅 | 12 | 1 |
4 | 杯子 | 42 | 0 |
对于这种查询,可以分成两部来理解,首先忽略整个select子查询,查出商品表中的数据。
在结果字段中使用子查询的关键两点:
1.子查询只能返回一条数据,如果子查询返回多条数据则会出错。
2.每一条select子查询只能查询一个字段。