UNIQUE kısıtlaması ayarlayamadığım iki alana (her iki yabancı anahtar) göre bir tabloyu güncellemem veya eklemem gereken bir durum yaşadım (bu nedenle INSERT ... ON DUPLICATE KEY UPDATE çalışmaz). İşte kullanmaya son verdiğim şey:
replace into last_recogs (id, hasher_id, hash_id, last_recog)
select l.* from
(select id, hasher_id, hash_id, [new_value] from last_recogs
where hasher_id in (select id from hashers where name=[hasher_name])
and hash_id in (select id from hashes where name=[hash_name])
union
select 0, m.id, h.id, [new_value]
from hashers m cross join hashes h
where m.name=[hasher_name]
and h.name=[hash_name]) l
limit 1;
Bu örnek, giriş parametreleri (iki ad ve bir sayı) [hasher_name], [hash_name] ve [new_value] ile değiştirilerek veritabanımın birinden alınmıştır. Yuvalanmış SELECT ... LIMIT 1, var olan kaydın veya yeni bir kaydın ilkini çeker (last_recogs.id bir otomatik artış birincil anahtardır) ve bunu REPLACE INTO'ya değer girişi olarak kullanır.