2014-12-04 2 views
2

저는 MySQL에 처음 접했지만 두 가지 일에 개별 솔루션을 찾았습니다. 그들을 결합하는 데 도움이 필요합니다.여러 행을 하나의 행으로 결합 MySQL과 하나의 필드에서 동일한 값으로 두 값을 나누는 쿼리

사용자 및 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`; 

이러한 quires를 하나의 방법으로 결합 할 수 있습니까?

답변

0

내가 대신 이름과 성을 원하는 것으로 알고 생각하는 경우 UNION SELECT, row1_name, row2_name이, 기억이 안나요

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 
+0

** 정말 고맙습니다 !! ** 나는 ') AS 회원 이름 뒤에'라는 추가 't1.name'을 추가하여 다음과 같은 사실을 확인했습니다. 표시 이름으로 사용할 전체 이름을 가졌습니다. –

+0

또한 profile.address1, profile.city, profile.postal_code 및 profile.phone 열로 출력되는 데이터를 TRIM으로 변환하고 싶습니다. 코드는 다음과 같을 것이라고 생각합니다 : TRIM (BOTH ' "'FROM profile.address1) AS trimmed_profile.address1 FROM'user_profiles ...하지만 위와 통합 될 수 있는지 정확히 알 수는 없습니다 –

+0

TRIM을 둘러 쌀 수 있습니다. 그 중 어떤 것 (예 : ... THEN TRIM (t2.profile_value) END) ... – GDP

0

tbl_name를 트릭을 할해야 FROM 구문이 올바르지 만 쿼리가 조합 :

관련 문제