[SQL] MySQL은 : 분할 쉼표는 여러 행으로 구분 된 목록
SQLMySQL은 : 분할 쉼표는 여러 행으로 구분 된 목록
I는 다른 테이블에 외래 키 콤마 분리 된리스트를 포함하는 컬럼을 갖는 테이블이 표준화 :
+----------+-------------+ +--------------+-------+
| part_id | material | | material_id | name |
+----------+-------------+ +--------------+-------+
| 339 | 1.2mm;1.6mm | | 1 | 1.2mm |
| 970 | 1.6mm | | 2 | 1.6mm |
+----------+-------------+ +--------------+-------+
나는 검색 엔진 제공한다는 절차 적 언어로이 데이터를 읽고 싶어.
그러니 할 수있는 방법은이 칼럼에 가입하거나이 데이터에 대한 쿼리를 실행할이 그 새 테이블에 삽입 적절한 항목을? 결과 데이터는 다음과 같이한다 :
+---------+-------------+
| part_id | material_id |
+---------+-------------+
| 339 | 1 |
| 339 | 2 |
| 970 | 2 |
+---------+-------------+
DBMS에 테이블을 반환하는 기능을 지원하는 경우 나는 해결책 생각할 수 있지만, MySQL은 분명히하지 않습니다.
해결법
-
==============================
1.MySQL의에서 이것은 다음과 같이 얻을 수있다
MySQL의에서 이것은 다음과 같이 얻을 수있다
SELECT id, length FROM vehicles WHERE id IN ( 117, 148, 126) +---------------+ | id | length | +---------------+ | 117 | 25 | | 126 | 8 | | 148 | 10 | +---------------+ SELECT id,vehicle_ids FROM load_plan_configs WHERE load_plan_configs.id =42 +---------------------+ | id | vehicle_ids | +---------------------+ | 42 | 117, 148, 126 | +---------------------+
이제 쉼표의 길이를 얻을 vehicle_ids 쿼리 아래의 사용 구분
Output SELECT length FROM vehicles, load_plan_configs WHERE load_plan_configs.id = 42 AND FIND_IN_SET( vehicles.id, load_plan_configs.vehicle_ids ) +---------+ | length | +---------+ | 25 | | 8 | | 10 | +---------+
추가 정보를 보려면 다음 사이트를 방문 http://amitbrothers.blogspot.in/2014/03/mysql-split-comma-separated-list-into.html
-
==============================
2.나는 많은 일 등 두 개의 유사한 질문에 대한 답변하지만 사람들은 커서의 사용에 의해 연기되는 생각 때문에하지 어떤 응답을했지만,이 과정 떨어져 일을해야 나는 개인적으로 그 문제를 생각 해달라고했습니다.
나는 많은 일 등 두 개의 유사한 질문에 대한 답변하지만 사람들은 커서의 사용에 의해 연기되는 생각 때문에하지 어떤 응답을했지만,이 과정 떨어져 일을해야 나는 개인적으로 그 문제를 생각 해달라고했습니다.
아직 MySQL을 나던 지원 테이블 반환 형식을 언급 한 바와 같이 그래서 당신은 테이블 루프 이외의 약간의 옵션을 가지고 재료 CSV 문자열을 구문 분석하고 부품 및 자재에 해당하는 행을 생성합니다.
다음 게시물이 관심을 증명할 수 있습니다 :
포스트 PHP는 MySQL을위한 분할 키워드
다른 테이블에 테이블을 준비에서 부하 데이터를 MySQL의 절차. 그 과정에서 다중 값 필드를 분할해야
RGDS
-
==============================
3.MySQL은 임시 테이블 재사용이없는 및 기능 행을 반환하지 않습니다.
MySQL은 임시 테이블 재사용이없는 및 기능 행을 반환하지 않습니다.
내가 MySQL의에서 내 자신을 썼다 그래서 나는 행으로 CSV 정수의 변환 문자열에 스택 오버플로에서 아무것도 찾을 수 없습니다.
DELIMITER $$ DROP PROCEDURE IF EXISTS str_split $$ CREATE PROCEDURE str_split(IN str VARCHAR(4000),IN delim varchar(1)) begin DECLARE delimIdx int default 0; DECLARE charIdx int default 1; DECLARE rest_str varchar(4000) default ''; DECLARE store_str varchar(4000) default ''; create TEMPORARY table IF NOT EXISTS ids as (select parent_item_id from list_field where 1=0); truncate table ids; set @rest_str = str; set @delimIdx = LOCATE(delim,@rest_str); set @charIdx = 1; set @store_str = SUBSTRING(@rest_str,@charIdx,@delimIdx-1); set @rest_str = SUBSTRING(@rest_str from @delimIdx+1); if length(trim(@store_str)) = 0 then set @store_str = @rest_str; end if; INSERT INTO ids SELECT (@store_str + 0); WHILE @delimIdx <> 0 DO set @delimIdx = LOCATE(delim,@rest_str); set @charIdx = 1; set @store_str = SUBSTRING(@rest_str,@charIdx,@delimIdx-1); set @rest_str = SUBSTRING(@rest_str from @delimIdx+1); select @store_str; if length(trim(@store_str)) = 0 then set @store_str = @rest_str; end if; INSERT INTO ids(parent_item_id) SELECT (@store_str + 0); END WHILE; select parent_item_id from ids; end$$ DELIMITER ; call str_split('1,2,10,13,14',',')
당신의 int를 사용하지 않는 경우에도 다른 유형에 캐스팅해야합니다.
-
==============================
4.또한 정규 표현식을 사용할 수 있습니다
또한 정규 표현식을 사용할 수 있습니다
SET @materialids=SELECT material FROM parttable where part_id=1; SELECT * FROM material_id WHERE REGEXP CONCAT('^',@materialids,'$');
당신이 한 부분을 취득하고자 할 때 도움이 될 것입니다. 물론 안 전체 테이블
from https://stackoverflow.com/questions/3936088/mysql-split-comma-separated-list-into-multiple-rows by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 삽입 및 인출 java.time.LocalDate는 H2와 같은 SQL 데이터베이스에서 /에 객체 (0) | 2020.04.02 |
---|---|
[SQL] 어떻게 날짜에 주 수를 변환하는? (0) | 2020.04.02 |
[SQL] 합니까 sqlite3를 외부 키 제약 조건을 지원하지? (0) | 2020.04.02 |
[SQL] 무향 그래프의 연결된 모든 서브 그래프를 찾는 방법 (0) | 2020.04.02 |
[SQL] 자바 프로그램에 방지 SQL 주입 공격 (0) | 2020.04.02 |