newtableのストアIDをここのmaintableのIDと同期しようとしています:
UPDATE newtable t SET t.store_id = (SELECT store_id FROM maintable s
WHERE t.state = s.state AND s.city = t.city AND t.name = s.name)
サブクエリが複数の行を返す場合は常に「サブクエリは複数の行を返します」とエラーになりますが、ゼロ行を返す場合、サブクエリは何も返さなかったと見なされるため、newtableのstore_idはNULLのままです。ここでは何も新しいことはありません、それはそれがどのように機能するかです。
一致する行が複数ある場合に、一致するものがない場合と同じようにサブクエリを出力できるかどうかを知りたいのですが。
このようにして、メインテーブルの1つの一致する行に対してのみstore_idを同期し、サブクエリで複数の一致する行が出たときにスキップします。