【问题标题】:Select distinct join multiple tables选择不同的连接多个表
【发布时间】:2018-07-27 07:25:07
【问题描述】:

我在 MySQL 中有两个长表,格式如下

Tab1
=========
col1 col2
A    X
B    Y

Tab2
=========
col3 col4
A    dog
A    cat
A    dog
B    tree
B    tree
B    bush

我想为 Tab1 的每一行检索 Tab2 的不同值,其中 col1=col3,这样输出看起来像

   Col1   Col4
    A    (dog,cat)
    B    (tree,bush)

我尝试了 SELECT DISTINCTJOIN ON 的组合,但我刚刚获得

dog
cat
tree
bush

我想做的事情可行吗?

【问题讨论】:

  • Tab2 不是严格的 rdbms 意义上的表,因为它没有唯一键。你能以某种方式解决这个问题吗?否则,这并不是真正的 sql 问题
  • 原来的Tab2还有一个3列设置为主键,所有的值都互不相同
  • 继续阅读 group_concat dev.mysql.com/doc/refman/8.0/en/…
  • 显示查询,您正在写入以获取所需的结果???
  • 添加之前的建议:select col3 group_concat(distinct col4) from Tab2 join Tab1 on Tab1.col1=Tab2.col3;但我可以看出这是错误的。

标签: mysql


【解决方案1】:
SELECT Tab1.col1, GROUP_CONCAT(DISTINCT Tab2.col4) 
FROM Tab1 
INNER JOIN Tab2 ON Tab1.col1 = Tab2.col3
GROUP BY Tab1.col1

请注意,“结果将被截断为 group_concat_max_len 系统变量给出的最大长度,其默认值为 1024”。 (https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_group-concat)

如果您期望有很多连接值,则应将此变量设置为更高的值。

【讨论】:

  • 这样我只得到第一行是A(狗,猫)而不是B(树,灌木)
  • 我的错:我忘记了 GROUP BY!我已经用更正编辑了我的答案。
  • 因为这是一个内连接,所以 tab1 是多余的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 2017-12-05
  • 2015-05-08
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
相关资源
最近更新 更多