2010-03-22 7 views
0

여기서는 꽤 많은 selcet + 업데이트 질문을 읽었지만 어떻게 할 수 있는지 이해할 수 없습니다. 그래서 처음부터 물어야합니다.mysql select update

다른 테이블의 데이터를 기반으로 테이블을 업데이트하고 싶습니다. 설정은 다음과 같이이다 :

SELECT id, word FROM a 
(for each) -> UPDATE b SET words = CONCAT(words, ',', a.id) WHERE b.textarea like %a.word% 

또는 더 나은 :

이제
- TABLE a (int ; string) 
ID  WORD 
1  banana 
2  orange 
3  apple 

- TABLE b ("comma separated" string ; string) 
WORDS TEXTAREA 
0  banana     -> 0,1 
0  orange apple apple  -> BEST:0,2,3 ELSE 0,2,3,3 
0  banana orange apple  -> 0,1,2,3 

내가 좋아하는 b.WORDS 표에서 각 단어 APPEND ", a.ID"에 대한 싶습니다 단어를 교체 b.textarea에서 ", a.id"로 발견되었으므로 쉼표로 구분 된 id의 문자열로 끝나는 b.textarea입니다. 그러나 가능한지 여부는 알 수 없습니다.

시도했지만 작동하지 않습니다. 그러나 나는 점점 가까워지고 있다고 생각한다.

UPDATE a, b 
SET b.textarea = 
replace(b.textarea,a.word,CONCAT(',',a.id)) 
WHERE a.word IN (b.textarea) 
ORDER BY length(a.word) DESC 

답변

0

답변을 얻으려면이 중 하나 인 "a cleaner double post"을해야했습니다.

용액

이 설명서에 기초하여 조립 될 수 http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_group-concat

GROUP_CONCAT는 CONCAT한다 fileds에 기초 쉼표로 구분 된 문자열을 만들 것이다. 완전한. 결과에 dublicate가없는 선호 솔루션에 대해서는 GROUP_CONCAT에서 DISTINCT를 사용하여 dublicate를 필터링하는 예제가 있습니다.

mysql> SELECT student_name, 
    ->  GROUP_CONCAT(DISTINCT test_score 
    ->    ORDER BY test_score DESC SEPARATOR ' ') 
    ->  FROM student 
    ->  GROUP BY student_name; 
0

나는 일 라운드를 끝내었다. 나는 엑셀 모든 a.words 수출이 같은 각 행에 대한 업데이 트 생성 :

UPDATE `tx_ogarktiskdocarchive_loebe` SET `temp_dictionay` = replace(lower(temp_dictionay) , lower('Drygalski’s Grønlandsekspedition'), CONCAT(',',191)); 

가 그럼 난 ANS SQL 파일에 함께 aprox 1000 개 행을 붙여 그것을 실행합니다. 끝난.