2011-01-19 4 views
1

저는 mysql을 처음 접했고 그렇게 많이 알지 못합니다. :) 내가 다른 사람의 시작 부분으로, 하나 개의 필드에서 문자열을 CONCAT하는 방법을 알아 내려고 노력하고있어필드를 다른 필드 (다른 행, id = parentID)에 복사하십시오.

bla bla

. 동일한 테이블이지만 다른 행. using id = parentID 또는 where를 사용합니다. 아래 표를 확인하십시오. 잘하면 이해할 수 있습니다.

내 테이블이 나를 도울 수 밖에

table 
id | textcol   | extra_textcol | parentID 
1 | 'extratext2text1' | NULL   | NULL 
2 | NULL    | 'extratext2' | 1 
3 | 'text'   | NULL   | NULL 

사람을 : 내가 얻으려고

table 
id | textcol | extra_textcol | parentID 
1 | 'text1' | NULL   | NULL 
2 | NULL | 'extratext2' | 1 
3 | 'text' | NULL   | NULL 

결과? 말을, 내가 원하는 결과가 UPDATE에서이다 분실 :

편집 업데이 트를 만들려면 D

+0

'ParentId = 1'을 (를) 가진 레코드가 두 개 이상입니까? 이 경우 레코드'1 '에 대해'textcol'에 무엇을 넣고 싶습니까? – Quassnoi

+0

이전 데이터베이스의 데이터를 새 데이터베이스로 가져옵니다. 새 항목을 만들 때 데이터가 텍스트 콜에 입력되므로 새 항목은 필요하지 않습니다. 그래서 textcol로 옮겨야하는 extra_textcol 부분을 기반으로 오래된 데이터가 있습니다. – beholder

+0

질문에 대답하지 않았습니다. 'ParentId = 1'을 가진 레코드가 두 개 이상 있습니까? 이 경우 레코드'1 '에 대해'textcol'에 무엇을 넣고 싶습니까? – Quassnoi

답변

0
SELECT mc.id, CONCAT(COALESCE(GROUP_CONCAT(mp.extra_textcol ORDER BY id SEPARATOR ''), ''), mc.textcol) AS textcol, mc.extra_textcol, parentID 
FROM mytable mc 
LEFT JOIN 
     mytable mp 
ON  mp.ParentID = mc.id 
GROUP BY 
     mc.id 

, 당신은 먼저 임시 테이블을 만들어야하기 때문에 MySQL은하지 않습니다 갱신에서 갱신 된 테이블에 부속 조회를 사용하게하십시오. 당신이 CREATE TABLE에 메모리 부족 오류가있는 경우

CREATE TABLE newtable (id INT NOT NULL PRIMARY KEY, textcol TEXT) ENGINE=Memory 
AS 
SELECT mc.id, CONCAT(COALESCE(GROUP_CONCAT(mp.extra_textcol ORDER BY id SEPARATOR ''), ''), mc.textcol) AS textcol, mc.extra_textcol, parentID 
FROM mytable mc 
LEFT JOIN 
     mytable mp 
ON  mp.ParentID = mc.id 
GROUP BY 
     mc.id; 

UPDATE mytable m 
JOIN newtable n 
ON  m.id = n.id 
SET  m.textcol = n.textcol 

, 당신은 MyISAM 대신 Memory 스토리지 엔진을 사용해야합니다.

+0

고마워. 그래도 오류가 발생합니다. "열 'extra_textcol'필드 목록에 모호합니다." 나는 mc.extra_textcol, mp.parentID와 같은 것으로 변경해야한다고 생각하니? 그리고 업데이 트에 대한 업데이 트 mytable 세트와 함께 그냥 ....? – beholder

+0

죄송합니다. 필자는 새로운 결과로 테이블을 업데이트하고 싶었습니다. ^^; 당신이 나에게 그러한 업데이트를하는 방법을 보여줄 수있는 기회라면? – beholder

+0

Brilliant! 이제 완벽하게 작동하는 것처럼 보입니다. :) 고마워요! – beholder

관련 문제