0

まず、私の英語で申し訳ありません。

生成された md5 で 2 つのレコードを比較したい:

table1 から取得した情報を table2 に挿入します

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

しかし、うまくいきません。

私が欲しいのは、テーブル2にはないテーブル1のレコードですが、そこから、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 に答える