如果我使用a.b而不是a.c自联接表,为什么o/p不同?此外,为什么o/p是Y等于1而不是2?
CREATE TABLE A (
B INT,
C CHAR(20)
);
INSERT INTO A VALUES (1,"X"),(2,"X"),(3,"Y"),(1,"T"),(2,"T");
SELECT
*
FROM
A;
SELECT
a.c, COUNT(a.c) AS c1
FROM
A a
JOIN
A a1 ON a.c = a1.c
GROUP BY a.c;
得到重复的原因是查询中没有GROUP BY或DISTINCT子句,根据列值将结果缩减为不同的行。查询为表中的每一行返回一个计数,这是正常的。
你的结果不同的原因是你在不同的列上加入,所以如果你在数字列加入,你计算的是数字,而不是字母。
表A
如果您的原始表值如下:
SELECT * FROM tableA;
id | letter
-----------
1 | X
1 | T
2 | X
2 | T
3 | Y
示例1
您可以在select语句中手动编写查询,如下所示。实际上,对返回的每一行都执行一个单独的查询。
EXPLAIN -- show query breakdown
SELECT
DISTINCT -- get distinct letter, no duplicate rows.
a1.letter
, (SELECT count(*) FROM tableA a2 WHERE a1.letter = a2.letter) letter_cnt
FROM
tableA a1
;
此查询的效率较低,需要两个单独的查询。
id | select_type | 表 | 类型可能的_keys | 键 | 引用行筛选额外||
---|---|---|---|---|---|---|
1 | 主要 | a1 | 所有空空 | 5 | 100 | 小于td>空|
2 | 依赖子查询 | a2所有 | NULL | NULL | 5 | 20