2009-07-28 7 views
2

한 테이블의 문자열과 다른 테이블 내의 문자열 조각과 가장 가까운 알파벳 일치를 일치시키는 쿼리를 작성하고 싶습니다.알파벳 - 사전과 생각하는 SQL

주어진 경우 : 테이블 2 개가 있고 테이블 1에는 "gumby"라는 문자열이있는 레코드가 있습니다. 표 2에는 "g", "ga", "gam", "go", "ha", "hi"와 같이 단어를 시작하는 문자가 있습니다.

문제점 : "gu"항목이나 더 구체적인 (껌과 같은) 항목이 없으므로 "gumby"가 "go"와 일치하도록하려면 사전 순으로 "gumby"가 "h"이상 "go".

메커니즘 시도 : 1. "LIKE g %"문은 "g"로 시작하는 모든 조각을 반환하며 하나만 결과가 필요합니다.
2. "LIKE"g % "와 GROUP BY를 사용하는 문장"g "만 반환
3. GROUP BY 문에 MAX()를 추가하면"go "가 표시됩니다. 내 말은 "갤러가"있었다 - 그에 대한 올바른 자리가 될 "조지아 것"이라고

정말 전적으로 SQL이 알파벳순으로 단어를 달성하고자하는

+1

MySQL을 괴롭히기를 원하는 사람들은 프로그래밍 언어에 더 많은 이상한 것들을 남기고 싶어한다. – hobodave

+0

@hobodave : 두 테이블을 비 SQL 언어로 더 잘 비교할 때부터? 그런 태도가 너무나 빈약 한 SQL이 쓰여진 이유입니다. – Eric

+0

@hobodave 당신은 좋았을 수 있습니다. – ojreadmore

답변

5

SQL 염두에두고 사전과 비교 당신은 할 수 있습니다... 이것을 다음과 같이 활용하십시오 :

select 
    max(word) 
from 
    table2 t2 
where 
    word < @word 

01에서 모든 단어 목록을 얻으려면및 표 2에서 해당 단어, 당신이 할 것 :

select 
    t1.word, 
    (select max(word) as word from table2 where word <= t1.word) as Dictionary 
from 
    table1 t1 
+0

에릭처럼 멋진 사람이 아니기 때문에 나는 이것을 생각하지 않았습니다. 내가 바보라고 보여주는 +1. – Welbog

+0

@Welbog : 나는 당신의 대답과 관련이 있었지만, 당신은 그것을 발레 시켰습니다. – Eric

+0

@ 에릭 : 메타의 메타 상태는 어떻게됩니까? – Welbog

0

무엇에 대해 뭔가

select word from Table_1 where work like 'g%' order by word asc LIMIT 0,1 

처럼 잘 모르겠어요 그 제한에 대한 정확한 synatx가 있다면, 그것은 잠시 이후되었습니다 나는 mysql을 사용했다.

+0

이것은 ... 전혀 작동하지 않을 것입니다, 나는 두려워합니다. 모든 'g'단어에 대해 'go'를 반환합니다. 어느 것이 완전히 잘못된 결과입니다. – Eric

+0

나는 오름차순으로 정렬하기 때문에 알파벳의 앞부분이 먼저 반환됩니다. 따라서 "ga"는 "go"가 아닌 반환됩니다. 적어도 이것이 SQL 서버에서 작동하는 방법입니다. – cptScarlet

+0

@Scarlet : 'gum'은 'gumby'에 대해 반환 될 것이므로 OP의 요청 된 결과 집합이 무효화됩니다. – Eric