2011-12-15 4 views
0

우리는 열거 형이있는 대신 연결 테이블의 ID로 변경하려고합니다.열거 형에서 연결된 테이블로 변경

어떻게 생각 하나?

우리의 현재 열거 이름 : strat
우리의 새로운 연결 이름 : 나는 아직 링크 테이블을 작성하지

UPDATE table_name 
SET stratid = (SELECT id FROM link_table WHERE stratname = table_name.strat); 

: stratid

은 내가 생각하는 것은의 라인을 따라 뭔가했다 , 지금 그것은 모든 이론입니다.

위 작업이 가능합니까?
열거 형에서 연결된 테이블로 전송하기 위해 변경해야 할 것이 있습니까? 당신보다 다른 업데이트를 만들기위한

답변

0

없음 개는 필요link_table.idtable_name.strat 옵션이 정의되는 순서로 엄격하게 설치되었는지 트리플가 있는지 확인하려면 없습니다.

예를 들어, 만약 enum('FOO', 'BAR')strat 다음에 linked_tableid == 1 가진 레코드가 "FOO"기록되어야한다.

그 후에는 stratidNON NULL을 만들고 싶습니다. 이것은 이전의 배열과 엄격하게 동일하지는 않지만, 아마도 당신이 원하는 것에 더 가까울 것입니다.

+0

'엄격하게 주문 하시겠습니까?'란 무엇을 의미합니까? 같은 ID를 사용하는 여러 레코드가있을 것입니다 ... – Neal

+0

@Neal : 편집을했습니다. 필자는 연결된 테이블의 각 값의 ID가 해당 enum 요소의 정수 값과 같아 지도록 (필요가 너무 강하다.) 추가 된 호환성 측정 만 원한다는 것을 의미했습니다. – Jon

+0

enum 값은 ** not ** 정수입니다. – Neal

0

예, 첫째,

는 자동 증가 ID

삽입 link_table에 대한 게으른 솔루션 사용으로 독특한 stratname 설정 링크 테이블을 만들 : 그러나

insert into link_table 
select distinct strat from table_name order by strat; 

을, 나는 확실하지 미리 정의 된 enum이 모두 사용되고 있습니다.

또한 열거 형의 크기를 모르면
수동 삽입을 제안 할 수 없습니다.

select column_type from information_schema.columns 
where schema_name="table_name" and column_name = "strat"; 

당신은 link_table 삽입을하는 프로그래밍 언어와 결합 할 수 있습니다 -이 :

당신이 열거 보면 ...

enum('...', '...', ...) <-- is just a comma separated value 

그래서, 여기에 CSV를 얻을 수있는 쿼리입니다 .

마지막으로 UPDATE 쿼리가 매우 최적화되지 않은 경우 INNER JOIN을 사용하도록 전환 할 수 있습니다.
하지만 일회성 직업이라고 생각합니다.

관련 문제