mysql - 将多行合并为一行 MySQL 并在同一查询中将值从一个字段拆分为两个

标签 mysql

我是 MySQL 的新手,但我已经设法为我尝试做的两件事找到了单独的解决方案,现在我只需要帮助将它们结合起来。

我有一个包含两个表的数据库:Users 和 user_profile。我设法创建了一个查询,将两个表中的数据合并到一个表中,内容如下:

select t1.id,
  t1.name,
  max(case when t2.`profile_key` = 'profile.address1' then t2.profile_value end) address,
  max(case when t2.`profile_key` = 'profile.city' then t2.profile_value end) city,
  max(case when t2.`profile_key` = 'profile.postal_code' then t2.profile_value end) postal_code,
  max(case when t2.`profile_key` = 'profile.phone' then t2.profile_value end) phone
from users t1
left join user_profiles t2
  on t1.id = t2.user_id
group by t1.id, t1.name

我还想将“姓名”列拆分为“名字”和“姓氏”,以便我可以按姓氏排序。我可以用这个来完成:

SELECT IF(
        LOCATE(' ', `name`) > 0,
        SUBSTRING(`name`, 1, LOCATE(' ', `name`) - 1),
        `name`
    ) AS memberfirst,
    IF(
        LOCATE(' ', `name`) > 0,
        SUBSTRING(`name`, LOCATE(' ', `name`) + 1),
        NULL
    ) AS memberlast
FROM `users`;

有没有办法将这些要求合二为一?

最佳答案

我想我明白你想要名字和姓氏而不仅仅是名字,所以试试这个:

SELECT t1.id,
IF(
    LOCATE(' ', t1.name) > 0,
    SUBSTRING(t1.name, 1, LOCATE(' ', t1.name) - 1),
    t1.name
    ) AS memberfirst,
    IF(
    LOCATE(' ', t1.name) > 0,
    SUBSTRING(t1.name, LOCATE(' ', t1.name) + 1),
    NULL
    ) AS memberlast , 
  MAX(CASE WHEN t2.`profile_key` = 'profile.address1' THEN t2.profile_value END) address,
  MAX(CASE WHEN t2.`profile_key` = 'profile.city' THEN t2.profile_value END) city,
  MAX(CASE WHEN t2.`profile_key` = 'profile.postal_code' THEN t2.profile_value END) postal_code,
  MAX(CASE WHEN t2.`profile_key` = 'profile.phone' THEN t2.profile_value END) phone
FROM users t1
LEFT JOIN user_profiles t2
  ON t1.id = t2.user_id
GROUP BY t1.id, t1.name

关于mysql - 将多行合并为一行 MySQL 并在同一查询中将值从一个字段拆分为两个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27306109/

相关文章:

mysql - 带有 Node.js 以及数据库和流程的 Microsoft Bot 框架

MySQL 时间戳到日期时间的转换

c++ - mysql和c++连接

c# - Entity Framework 不保存生产环境中的更改

java - MySQL 登录框架中的空指针异常

mysql - 处理 codeigniter mysql 插入中的重复键

python - Django:如何正确处理数据库连接错误

python - 从 MySQL 检索数据到 Python 2.7

mysql - 我的 MySQL 语法有什么问题?

mysql - Grails App 上的破管异常