【发布时间】:2017-04-15 21:58:19
【问题描述】:
例如,我有两个表:
CREATE TABLE `augus1dl_ecom`.`test`
(
`id` INT NOT NULL AUTO_INCREMENT,
`cn_no` VARCHAR(10) NOT NULL,
`amt` DECIMAL(8,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = MyISAM;
CREATE TABLE `augus1dl_ecom`.`test2`
(
`id` INT NOT NULL AUTO_INCREMENT,
`docket_id` VARCHAR(25) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`cn_id` INT NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = MyISAM;
INSERT INTO `augus1dl_ecom`.`test` (`id`, `cn_no`, `amt`)
VALUES (NULL, 'A', '100'), (NULL, 'B', '200');
INSERT INTO `augus1dl_ecom`.`test2` (`id`, `docket_id`, `cn_id`)
VALUES (NULL, 'DK1', '1'), (NULL, 'DK2', '2'), (NULL, 'DK3', '1') ;
在test 表中,cn_no 是唯一的。但在test2 表中,单个cn_no(指cn_id)可以插入多次。
我的意思是test.id = test2.cn_id。
现在我运行以下查询:
SELECT a.*
FROM test2 a, test b
WHERE b.id = a.cn_id AND b.cn_no = 'A'
运行成功。但我不需要数据,我需要行数/条目数。因此,我运行以下查询以从test 检索行数(计数),具体取决于test2 中的条件:
SELECT count(a.*)
FROM test2 a, test b
WHERE b.id = a.cn_id AND b.cn_no = 'A';
但是查询失败并出现错误。有人建议此问题与SQL: Combine Select count(*) from multiple tables 重复,但事实并非如此。在这里,我想要count(*),具体取决于另一个表中可用的数据。我怎样才能正确地做到这一点?
【问题讨论】:
-
只需使用
SELECT count(*)而不是count(a.*)。如果a.*工作,您将获得相同数量的行事件。count计算单个列。count(*)只是一个快捷方式,意思是“计算行数,我不在乎哪一列。count(a.*)相当于count(id, cn_no, ...),这是无效的语法。 -
但
count (column_name)不计算具有NULL值的字段。将来可能会出现问题,与其他场景一起使用。 -
Count是一个聚合函数,所以需要添加group by子句,即group by b.id