2015-01-03 4 views
-1

의 여러 컬럼의 쉼표로 구분 된 값을 일치시켜 여러 열을합니다 주문 가진 열 :나는 테이블을 하나의 테이블

-------------------------------- 
id | liquids| strength 
-------------------------------- 
1 | 1,2,3 | 10,12,13 
2 | 2,3,4 | 12,13,18 
-------------------------------- 

I 출력 등의 아래에 원하는 :

-------------------------------- 
id | liquids| strength 
-------------------------------- 
1 | 1  | 10 
1 | 2  | 12 
1 | 3  | 13 
2 | 2  | 12 
2 | 3  | 13 
2 | 4  | 18 

+0

'liduids' 및'strength' 열의 유형은 무엇입니까? 또한 문제를 해결하기 위해 뭔가를 시도해 보셨습니까? 그렇다면 오류가 발생했을 때 표시하십시오. –

+0

두 데이터 유형은 모두 varchar입니다. – user3890150

+0

'strength' 칼럼에 어떻게 삽입 했습니까? –

답변

0

a_horse_with_no_name에 명시된 바와 같이 정규화를 참조하십시오. 그러나 아래에 제공된 예와 같은 것이이 단계 일 수 있습니다. 이 예제에서 ints은 0-9의 정수 (i)의 간단한 테이블이고 my_table은 테이블입니다.

SELECT id,IF(LENGTH(liquids) - LENGTH(REPLACE(liquids, ',', '')) + 1 >= i, 
      SUBSTRING_INDEX(SUBSTRING_INDEX(liquids, ',', i), ',', -1), 
      '' 
) +0 liquid, 
IF(LENGTH(strength) - LENGTH(REPLACE(strength, ',', '')) + 1 >= i, 
      SUBSTRING_INDEX(SUBSTRING_INDEX(strength, ',', i), ',', -1), 
      '' 
) +0 strength 
FROM my_table,ints HAVING liquid > 0 ; 
+0

gr8 .. 작동합니다. 도와 주셔서 대단히 감사합니다. :) – user3890150

+0

하지만 왜 0,0 개의 항목을 제공합니까 ?? – user3890150

+0

나는 따라 가지 않는다. – Strawberry

0

불가능 같다을 맞춤 프로 시저없이. 이 기사를 보자. http://kedar.nitty-witty.com/blog/mysql-stored-procedure-split-delimited-string-into-rows

테이블 구조는 데이터베이스 세계에서 최적이 아니다. 대부분의 경우 데이터를 이미 행으로 분리하여 보관해야합니다. 데이터베이스를 변환하려면 스크립팅 언어를 사용하십시오. 즉석에서 수행하고 데이터를 그대로 유지하려면 변형을 재고하십시오. 귀하의 데이터를 효과적으로 운영하는 데 도움이됩니다.

관련 문제