2016-10-12 3 views
1

공통점이있는 문자열 수에 따라 두 개의 서로 다른 테이블에서 두 개의 열을 일치시켜야합니다. 그래서 열 하나의 예를 들어 내가 가진 :부분 문자열이 SQL에서 일치합니다

================Table 1============================== 
ID  desc    Year  Month 
123 food_drink  2016  8 
345 shoe_bag   2016  8 
678 001_toilet_paper 2015  7 
910 Bags_of_thing 2015  6 

======================table 2====================== 
ID  Name   Year  month 
ad  drink_server 2016  8 
ac  shoe_shiny  2016  8 
aa  white_paper 2015  7 
cc  blue_bags  2015  6 

는 설명과 이름으로 년, 월과 비슷한 문자열을 결합하여 두 테이블을 결합 할 수있는 방법이있다. 그래서 그들은> = 5 공통, 다음 문자열이 있는지 확인하기 위해 내림차순 이름 열을 비교 : 본질적으로

=================================================== 
ID1 ID2 name   desc    Year Month 
123 ad drink server food_drink  2016 8 
678 aa white_paper 001_toilet_paper 2016 7 

을, 나는 다른 테이블의 두 열 사이에 일반적인 문자열의 수를 비교하는 방법이 필요합니다. 감사.

+0

- 절을 가입 단순히 참/거짓 부울 졸이다 : 사실 = 레코드 조인, false = 조인 없음. 그러나 하위 문자열 일치는 꽤 될 수 없습니다. sql은 임의의 문자열 조작을 수행하는 데 적합한 언어가 아닙니다. 테이블을 정규화하고 해당 음식/음료/서버/ㅋ/ㅋ 키워드를 자신의 하위 테이블에 넣는 것이 더 좋을 것입니다. 그러면 일치가 사소한 것입니다. 조인 + 동등성 테스트. –

+0

내가 이해하면 잘 모르겠습니다. table1의 각 행과 table2의 모든 행을 비교하여 5 개의 일반 필드가 있는지 (또는 정확하게) 5 개의 필드가 있는지 또는 열과 열을 비교할 것인지 확인하고 싶습니다. – Kacper

+0

어떤 DBMS를 사용하고 있습니까? –

답변

0

귀하의 문제는 귀하의 데이터가 First Normal Form조차도 아니기 때문에 SQL로 처리하는 것을 매우 어렵게 만듭니다.

이 내가 할 것 인 것이다 :

  • 단어로 필드를 분할하는 임시 테이블을 생성합니다. ID가 두 테이블의 키라고 가정합니다. 표는 다음과 같이 보입니다 :

    ============== 표 단어 1 ==================== ========

    ID1  word 
    123 food 
    123 drink 
    345 shoe 
    345 bag 
    ... 
    

============= 테이블 words2 =================

SELECT ID1, ID2 FROM words1 JOIN words2 ON (word1.word = words2.word) 
GROUP by ID1, ID2 
having count(*) >= 5; 
: =====

ID2  word 
    ad  drink 
    ad  server 
    ac  shoe 
    ac  shiny 
    ... 

지금 당신은 쉽게 공통으로 5 개 단어 이상을 가지고있는 ID를 찾을 수 있습니다

일단 ID1과 ID2가 있으면 원래 테이블에 다시 참여하여 원하는 나머지 데이터를 검색 할 수 있습니다.

관련 문제