Mysql在使用GROUP_CONCAT的联接中重复的值

用户名

假设我有这个架构:

 _________                               _________
| Table 1 |                             | Table 2 |
|---------|          _______    ________|---------|
| id_a    |___      | link1 |   |       | id_b    |
| name    |   |     |-------|   |       | info    |
|_________|   |_____| id_a  |___|       | data    |
     |              | id_b  |           |_________|
     |              |_______|
     |
     |               _______
     |______________| link2 |_______
                    |-------|       |
                    | id_a  |       |   _________
                    | id_c  |       |__| Table 3 |
                    |_______|          |---------|
                                       | id_c    |
                                       | email   |
                                       |_________|

通过数据库中的这些信息:

表格1

 _____________
| id_a | name |
|------|------|
|   1  | foo  |
|______|______|

表2

 _____________________
| id_b | info | data  |
|------|------|-------|
|   1  | bar  | corge |
|   2  | kux  | corge |
|   3  | fred | quux  |
|______|______|_______|

表3

 _________________
| id_c | email    |
|------|----------|
|   1  | [email protected]  |
|   2  | [email protected]  |
|   3  | [email protected]  |
|   4  | [email protected]  |
|   5  | [email protected]  |
|______|__________|

链接1

 _____________
| id_a | id_b |
|------|------|
|   1  |   1  |
|   1  |   2  |
|   1  |   3  |
|______|______|

链接2

 _____________
| id_a | id_c |
|------|------|
|   1  |   1  |
|   1  |   2  |
|   1  |   3  |
|   1  |   4  |
|   1  |   5  |
|______|______|

当我尝试检索所需的数据时,我使用以下语法:

SELECT t1.*,
       GROUP_CONCAT(DISTINCT t2.info SEPARATOR  '|') AS info,
       GROUP_CONCAT(DISTINCT t2.data SEPARATOR  '|') AS data,
       GROUP_CONCAT(DISTINCT t3.email SEPARATOR '|') AS email
FROM table1 AS t1
LEFT JOIN link1 AS l1
ON l1.id_a = t1.id_a
LEFT JOIN table2 AS t2
ON t2.id_b = l1.id_b
LEFT JOIN link2 AS l2
ON l2.id_a = t1.id_a
LEFT JOIN table3 AS t3
ON t3.id_c = l2.id_c
WHERE t1.id_a = ?
GROUP BY t1.id_a

问题是,当我在一列中有两个或多个相同值时(例如带有“表2” /“数据”的示例),结果将不会给出相同数量的串联值:

array(
    'id_a'  => '1',
    'info'  => 'bar|kux|fred',
    'data'  => 'corge|quux',
    'email' => '[email protected]|[email protected]|[email protected]|[email protected]|[email protected]'
)

并且由于我需要级联值完全相同的数字,以便以后在我的代码中将其用作单个输出(例如Bar Corge,Kux Corge,Fred Quux),因此我想知道是否有可能将它们作为我期望直接在请求中?

用户名

所以我回答自己。我一直在寻找CONCAT_WS我的要求变成

SELECT t1.*,
       GROUP_CONCAT(DISTINCT CONCAT_WS(
            ' ', t2.info, t2.data
       ) SEPARATOR  ', ') AS info,
       GROUP_CONCAT(DISTINCT t3.email SEPARATOR '|') AS email
FROM table1 AS t1
LEFT JOIN link1 AS l1
ON l1.id_a = t1.id_a
LEFT JOIN table2 AS t2
ON t2.id_b = l1.id_b
LEFT JOIN link2 AS l2
ON l2.id_a = t1.id_a
LEFT JOIN table3 AS t3
ON t3.id_c = l2.id_c
WHERE t1.id_a = ?
GROUP BY t1.id_a

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mysql在使用GROUP_CONCAT的联接中重复的值

来自分类Dev

MySQL group_concat与联接

来自分类Dev

在MySQL中具有多个联接的group_concat

来自分类Dev

如何在使用一对多联接的查询中处理重复的值,为什么即使在使用group_concat时它们也会出现?

来自分类Dev

使用group_concat加入查询,重复值

来自分类Dev

与GROUP_CONCAT重复的值-CI

来自分类Dev

SQL左联接,group_concat返回重复数据

来自分类Dev

GROUP_CONCAT与联接导致重复记录

来自分类Dev

GROUP_CONCAT与联接导致重复记录

来自分类Dev

如何避免在GROUP_CONCAT中重复?

来自分类Dev

消除 GROUP_CONCAT 中的重复行

来自分类Dev

MySQL-优化-使用具有多个的group_concat和联接

来自分类Dev

Mysql 5.6.12 Group_concat与内部联接问题

来自分类Dev

在MYSQLI中搜索GROUP_CONCAT值?

来自分类Dev

MongoDB在MySQL中替换GROUP_CONCAT

来自分类Dev

MongoDB在MySQL中替换GROUP_CONCAT

来自分类Dev

MySQL在组列表中的group_concat

来自分类Dev

旧MySQL版本中的Group_concat

来自分类Dev

MySQL对多个JOINS使用GROUP_CONCAT

来自分类Dev

使用group_concat更新mysql表

来自分类Dev

MySQL的自我加入与group_concat,没有重复

来自分类Dev

GROUP_CONCAT中的使用条件

来自分类Dev

从group_concat使用

来自分类Dev

使用group_concat?

来自分类Dev

从group_concat使用

来自分类Dev

MySQL:在group_concat中使用concat时如何排序?

来自分类Dev

MySQL:在group_concat中使用concat时如何排序?

来自分类Dev

mysql group_concat重复键和1次查询中多列重复的次数(查询优化)

来自分类Dev

MYSQL:如何使用 GROUP_CONCAT 和使用 groupby 的分隔符附加空值?