2012-03-08 2 views
4

에서 값을 대체합니다MySQL은 내가 다음과 같습니다 내 데이터베이스의 테이블이 각각 기록

=========를
| 이드 | 코드 |
=========
| 1 | a |
=========
| 2 | 전자 |
=========
| 3 | r |
=========

등등. 알파벳의 어떤 글자가 이 아니며 테이블에이 아닌지를 알려주는 질의를 할 수 있기를 바랍니다.

나는 원래 이런 식으로 쿼리의 생각 :

SELECT는 ('ABCDEFGHIJKLMNOPQRSTUVWXYZ'('') 테이블에서 코드를 선택)를 교체;

그리고 'defghijklmnopqrstuvwxyz'가 출력되기를 바란다. 그리고 나는 이것을 사용되지 않는 문자 배열로 분해 할 수있다. 유감스럽게도, MySQL의 REPLACE에서는 값의 테이블을 사용할 수 없습니다.

이 목록을 작성하는 방법에 대한 제안 사항이 있으십니까?

+0

My MySQL은 녹슬지 만 좋은 질문입니다. 나는 내가 어디에서 (테이블에서 SELECT 코드) '와 함께 뭔가를 결합하여보고 시작할 것 같아요. –

+0

@DerekTomes 그건 내가 원래 생각했다. 불행하게도 "FROM"테이블을위한 전체 알파벳의 분리 된 정적 테이블이 필요합니다. 즉각적인 테이블 ('a', 'b', 'c'...)을 만들려고하지만 해당 구문은 FROM 필드에 허용되지 않습니다. – jwegner

+0

왜 필요합니까? –

답변

1

쉽게 왼쪽으로 문자를 제거 할 것 내가 이 알파벳의 각 문자에 대한 행이있는 테이블을 작성해야 할 추천하는 방법은, 마지막에 가입하고 GROUP_CONCAT.

그 테이블이 없다면 임시 변수와 글자 수보다 많은 행 사이에 JOIN을 사용하여 임시 "알파벳 표"를 작성하여 해킹해야합니다. 이 예제에서는 INFORMATION_SCHEMA.COLLATIONS를 사용합니다.

SELECT GROUP_CONCAT(CHAR(ch) SEPARATOR '') 'missing letters' FROM 
    (SELECT @tmp:[email protected]+1 ch 
    FROM (SELECT @tmp:=96) a, INFORMATION_SCHEMA.COLLATIONS 
    WHERE @tmp<122) z 
LEFT JOIN TableA ON ch=ORD(TableA.code) 
WHERE TableA.code IS NULL; 

중첩 된 SELECT는 알파벳 시퀀스를 만들고 LEFT JOIN은 TableA (사용자 테이블)에있는 문자를 제거합니다. GROUP_JOIN은 결과 문자를 연결합니다. 결과는 TableA에없는 모든 문자가 포함 된 문자열입니다.

0

로직을 서버 측에 빌드하십시오. 검색어를 만들어 사용 된 모든 문자를 가져온 다음 (별개) 결과 집합을 살펴보고 가능한 배열/문자열에서 사용 된 문자를 지 웁니다.

+0

가능한 대답과 아마도 내가해야 할 일입니다. 이상적인 상황은 SQL 쿼리에서 수행하는 것일 수도 있지만 이것은 충분할 수도 있습니다. – jwegner

+0

당신은 SQL에서 그것을 할 수 있습니다 : 임시 테이블을 작성할 수있는 모든 저장 가능한 프로 시저를 작성하고 결과를 얻기 위해 간단한 쿼리 만 작성하면됩니다. –

관련 문제