0

首先,对不起我的英语。

我想将两条记录与生成的 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 哈希不同,也显示它。但我没能得到它。我很感激你能给我的所有帮助。谢谢你。

4

2 回答 2

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
于 2012-10-17T21:16:36.217 回答
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;
于 2012-10-17T21:22:17.840 回答