左连接比较和md5(concat())mysql

时间:2012-10-17 21:12:41

标签: mysql left-join

首先,我很抱歉我的英语。

我想比较生成md5的两条记录:

我在table2中输入信息,我从table1

中输入
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

之后我想知道table1中哪些记录在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

但它不起作用。

我想要的是表1中不在table2中的记录,但是从那里,如果md5 hash不同也会显示它。但我没能得到它。我感谢你能给我的所有帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

也许你想要这个,看到最后添加的行,我也将!=更改为=

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

这招的基本形式:

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

答案 1 :(得分:0)

我相信这应该会帮助你(将hash_string移出join并将其追加为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;