2012-10-17 2 views
0

우선, 제 영어는 유감입니다.왼쪽 조인과 md5 (concat())를 비교 mysql

내가 생성 된 MD5 두 기록을 비교하려면 :

나는 내가 더는 존재가 없다 표 1에서 기록 무엇을 알고 싶어 그 후 표

INSERT INTO table2 (id_table_2, hash_string) 
SELECT t.id, MD5 (CONCAT (t.firstname, t.lastname)) AS hash_string 
FROM table1 t WHERE t.id = $some_value 

에서 가져 표 2에서 정보를 삽입 table2,하지만 내가 원하는 결과를 얻을 수 없습니다. 나는 이것을한다 :

SELECT t.id, MD5(CONCAT(t.firstname, t.lastname)) , ti.hash_string 
FROM table1 t 
    LEFT JOIN table2 ti ON (t.id = ti.id_table_2 
    AND MD5(CONCAT(t.firstname, t.lastname)) != ti.hash_string) 
    WHERE t.state = 2 

그러나 그것은 작동하지 않는다.

내가 원하는 것은 table2의 레코드가 table2에 없지만 거기에서 md5 해시가 다른 경우에도 표시됩니다. 그러나 나는 그것을 얻지 못했습니다. 네가 나에게 줄 수있는 모든 도움에 감사한다. 고맙습니다. (나는이 당신을 도울 것으로 판단

SELECT * 
FROM  a 
LEFT JOIN b ON a.id = b.id 
WHERE b.id IS NULL 

답변

1

hash_string을 조인 밖으로 이동하고 where 절로 추가) :

SELECT t.id, MD5(CONCAT(t.firstname, t.lastname)) , ti.hash_string 
FROM table1 t 
LEFT JOIN table2 ti ON (t.id = ti.id_table_2) 
WHERE t.state = 2 
    AND MD5(CONCAT(t.firstname, t.lastname)) != ti.hash_string 
    AND ti.id_table_2 is NULL; 
+0

뛰어난 비제 클릭 나를 위해 일합니다. 고마워요. 그게 내가 필요한거야. –

+0

도움이된다면 기쁘게 생각합니다. – biziclop

0

:

SELECT t.id, MD5(CONCAT(t.firstname, t.lastname)) , ti.hash_string 
FROM  table1 t 
LEFT JOIN table2 ti ON (t.id = ti.id_table_2 
        AND MD5(CONCAT(t.firstname, t.lastname)) = ti.hash_string) 
WHERE t.state = 2 
    AND ti.id_table_2 IS NULL 

이 트릭의 기본 형태 : 어쩌면 당신은이 마지막에 추가 라인을보고 싶어하고 나 또한 =!=을 변경

+0

yogendra 고마워요, 이것 역시 시도했지만 작동하지 않았습니다. 그는 모든 기록을 보여 줬어. thanks –

+0

'MD5 (CONCAT (t.firstname, t.lastname))! = ti.hash_string'에 의해 HashString이 일치하지 않는 곳에 oly 레코드를 얻어야합니다. 답안에도 'Null condition'이 추가되었습니다. 확인해주십시오. –

+0

훌륭해, 나에게도 좋다. Yongendra에게 감사드립니다. @ Yogendra –