1

2 つの mysql データベースがあります。最初のデータベースの 1 つのテーブルの列データと 2 番目のデータベースの列データを比較する必要があります。両方のデータベースで、テーブル名と列名は同じです。共通データを見つけなければなりません。列は varchar フィールドです。しかし、問題は「newyork times」であり、「times newyork」と「newyork」は一般的なものと見なす必要があります。SQL クエリを生成できません。これは私が試した手順です

drop procedure if exists test;
delimiter #
create procedure test()
begin

declare v_max int unsigned default 243;
declare v_counter int unsigned default 1;
declare pName varchar(255);

start transaction;
while v_counter < v_max do
select t.property_name from t.property where t.property_id=v_counter into pName;
SELECT distinct b.property.property_name,b.property.property_id from b.property where    b.property.property_name like '%'+pName+'%'
set v_counter=v_counter+1;
end while;
commit;
end #

delimiter ; 

同様に比較することはできますか?

4

1 に答える 1

1

このようなあいまいな比較を行うように MySQL に指示することはできません。次のどれが「同じ」と見なされるべきかを知ることができません

  • ニューヨーク・タイムズ
  • ニューヨーク・タイムズ
  • t
  • ニューヨーク

「間違い」の数が限られている場合は、ルックアップでそれらを正規化できます

WHERE t.property_name = REPLACE(v.property_name, 'new york times', 'new york')

しかし、もちろん、それはすぐに手に負えなくなります。

一時的であっても、新しい列を追加できますか? 次に、一連のプレパスでデータのある種のクレンジングを行うことができます。

UPDATE t
SET cleanpropertyname = 'new york times' 
WHERE property_name IN ('new york times', 'new york', 'nyt')
于 2012-05-22T11:58:56.827 に答える