2014-09-12 2 views
0

추출 문자열 I는 표 아래에있는 값 값 :추출 문자열은 주어진 파라미터에 기초

ID 기술

1 자바 16 오라클 10, PL/SQL-9, 바이 19, 펄-10

이 오라클-10, SQL-9, 자바 (20)

3 자바-10, C-10, 오라클-50

내 SQL은 매개 변수화 된 쿼리, 난 강한 게 아니하는 경우 r 입력 값은 다음과 같습니다 : skill1 = Java and : skill2 = Ora 그러면 출력은 다음과 같습니다 : 참고 : 위의 열 기술은 하위 쿼리 (연산자와 비교하여)를 기준으로 반환 할 때 항상 위의 두 매개 변수가있는 값을 갖습니다. 아래의 매개 변수 값만 사용하여 값을 추출해야합니다.

도시 된 바와 같이 열

값이 출력이 같아야 다른 스킬에 ','로 구분 번호와 함께 연결 능력을 갖는된다

ID 기술

1 자바 16 오라클-10

이 오라클-10, 자바 (20)

3 자바 (10), 오라클 (50)

+2

더 나은 데이터베이스 구조를 사용하십시오. 그것은 가능하지만 확장 성이 없거나 신뢰할 수 없습니다. 현재 – exussum

+0

@exussum 값은 실제 테이블에서 직접 가져온 것이 아니며 최종 결과 세트에 있습니다. '기술'열은 최종 사용자에게 표시 할 때 연결 값으로 반환됩니다. 숫자 기술 및 특정 후보자가 한 줄에 있다면, 데이터베이스는 제대로 설계되었습니다. – Sam

+0

게시 방법은 ID가 있기 때문에 테이블이 실제로 보이기 때문에 스킬을 설정하는 것이 아니라 "좋은"방법을 저장하는 것입니다. – exussum

답변

0

가능한 해결책은 쉼표로 구분 된 목록을 깨는 것은 다음과 같이

SELECT ID, GROUP_CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(Skills, ',', 1 + units.i + tens.i * 10), ',', -1)) 
FROM sometable, 
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units, 
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens 
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(Skills, ',', 1 + units.i + tens.i * 10), ',', -1) LIKE :skill1 
OR SUBSTRING_INDEX(SUBSTRING_INDEX(Skills, ',', 1 + units.i + tens.i * 10), ',', -1) LIKE :skill2 
GROUP BY ID 

이 빨리 될 것 같지 않다 (방금 전달 된 매개 변수 중 하나와 함께 시작 기술을 원하는 가정)이며 아마 것 이 상황을 피하기 위해 데이터를 소스 및 저장하는 방법을 재 설계하는 것이 더 좋습니다.

+0

은 약간 복잡해 보입니다. 논리를 재 설계하려고합니다. 시간 내 주셔서 감사합니다. – Sam