我是 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/