gpt4 book ai didi

SQL JOIN 问题(又一个)

转载 作者:行者123 更新时间:2023-11-29 04:13:37 26 4
gpt4 key购买 nike

听起来很简单,但我被卡住了

Table A                 Table B

col_a col_b col_a col_c
1 b 1 c
2 c 2 d
3 z 3 a
4 d 4 e
33 a 5 k
6 l
33 b
33 b

我想 JOIN 表 A 和 B:

select * from A inner join B on A.col_a = B.col_a

我期望得到 5 条记录。

Expected join result         ** Actual result **

col_a col_b col_c col_x[n]... col_a col_b col_c col_y[n]...
1 b c ... 1 b c ...
2 c d ... 2 c d ...
3 z a ... 3 z a ...
4 d e ... 4 d e ...
33 a b ... 33 a b ...
33 a b ...

为什么MySQL会两次匹配33?因为他们是2个值,在B表中有33个。

不过,我想要的只是在 col_a 中具有相同值的一条记录。我该怎么做?

编辑:我正在更新表的设计以包含更多包含不同数据的列,因为它们被提出的问题多于已解决的问题。无论如何,答案是使用 GROUP BY,但性能损失很大,尤其是在包含超过 5000 万条记录(并且还在增长)的表上。但是,解决我的问题的最佳方法是对 col_a 中的每个不同值使用复合语句(使用 UNION ALL)。性能优势快了 x5 ~ x10 !!

最佳答案

您在表 B 中有两次 33

SELECT DISTINCTGROUP BY col_a, ...:

SELECT DISTINCT * 
FROM A
JOIN B ON ( A.col_a = B.col_a )
;

SELECT    * 
FROM A
JOIN B ON ( A.col_a = B.col_a )
GROUP BY col_a, col_b, col_c
;

不过,你应该清理那张 table 。根据重复行的出现次数,使用子查询可能会更快:

SELECT  * 
FROM A
JOIN (select distinct * from B) AS C
ON ( A.col_a = C.col_a )
;

关于SQL JOIN 问题(又一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com