gpt4 book ai didi

MySQL CONCAT 多个唯一行

转载 作者:行者123 更新时间:2023-11-30 01:07:30 25 4
gpt4 key购买 nike

所以,这基本上就是问题所在:

首先,我并不是要求任何人做我的作业,而是只是给我一个正确方向的插入。

我有 2 个表格,其中包含用于练习的姓名和联系数据
我们将这些表称为 peoplecontact

人员创建表格:

CREATE TABLE `people` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`fname` tinytext,
`mname` tinytext,
`lname` tinytext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

联系人创建表:

CREATE TABLE `contact` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`person_id` int(10) unsigned NOT NULL DEFAULT '0',
`tel_home` tinytext,
`tel_work` tinytext,
`tel_mob` tinytext,
`email` text,
PRIMARY KEY (`id`,`person_id`),
KEY `fk_contact` (`person_id`),
CONSTRAINT `fk_contact` FOREIGN KEY (`person_id`) REFERENCES `people` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

在获取每个人的联系信息时,我使用的查询如下:
SELECT p.id, CONCAT_WS(' ',p.fname,p.mname,p.lname) name, c.tel_home, c.tel_work, c.tel_mob, c.email;

这只会产生如下响应:

+----+----------+---------------------+----------+---------+---------------------+| id | name     | tel_home            | tel_work | tel_mob | email               |+----+----------+---------------------+----------+---------+---------------------+|  1 | Jane Doe | 1500 (xxx-xxx 1500) | NULL     | NULL    | janedoe@example.com ||  2 | John Doe | 1502 (xxx-xxx 1502) | NULL     | NULL    | NULL                ||  2 | John Doe | NULL                | NULL     | NULL    | johndoe@example.com |+----+----------+---------------------+----------+---------+---------------------+

此 View 的问题是第 1 行和第 2 行(从 0 开始计数)可能已分组为单行。尽管这种“不漂亮”的结果是由于数据损坏造成的,但在多节点数据库环境中很可能会发生这种情况。

目标结果类似于

+----+----------+---------------------+----------+---------+---------------------+| id | name     | tel_home            | tel_work | tel_mob | email               |+----+----------+---------------------+----------+---------+---------------------+|  1 | Jane Doe | 1500 (xxx-xxx 1500) | NULL     | NULL    | janedoe@example.com ||  2 | John Doe | 1502 (xxx-xxx 1502) | NULL     | NULL    | johndoe@example.com |+----+----------+---------------------+----------+---------+---------------------+

在仍显示有效数据的情况下,将具有相同 idname 的行分组。

旁注:
innodb_version:5.5.32
版本:5.5.32-0ubuntu-.12.04.1-log
version_compile_os:debian_linux-gnu

最佳答案

您可以使用GROUP_CONCAT() ,“返回一个字符串结果,其中包含来自组的连接的非 NULL”:

SELECT   p.id,
GROUP_CONCAT(CONCAT_WS(' ',p.fname,p.mname,p.lname)) name,
GROUP_CONCAT(c.tel_home) tel_home,
GROUP_CONCAT(c.tel_work) tel_work,
GROUP_CONCAT(c.tel_mob ) tel_mob,
GROUP_CONCAT(c.email ) email
FROM my_table
GROUP BY p.id

关于MySQL CONCAT 多个唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19638876/

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