什么是自联接,它是如何工作的?我知道它是用来连接一个表本身的,我正在努力了解它背后的工作机制



如果我使用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
;

此查询的效率较低,需要两个单独的查询。

类型引用行筛选额外所有空小于td>空a220
idselect_type可能的_keys
1主要a15100
2依赖子查询所有NULLNULL5

相关内容

  • 没有找到相关文章

最新更新