のANSI SQL:
update table_one
set intersects =
case when
(select count(*) from table_two where name = table_one.name) > 0
then 1
else 0 end
MySQLが参加:
update table_one t1
left join table_two t2 on
t1.name = t2.name
set t1.intersects = case when t2.name is not null then 1 else 0 end
あなたがintersects
を保つためにtrigger
にこのクエリを置くことができる最新:今
create trigger intersections after insert for each row
begin
update table_one t1
left join table_two t2 on
t1.name = t2.name
set t1.intersects = case when t2.name is not null then 1 else 0 end
where t1.name = new.name
end
、設計の議論のために:
intersects
の列は素晴らしく、すべてが同期していない問題にぶつかります。
select
*
from
table_one t1
where
exists (select 1 from table_two t2 where t2.name = t1.name)
あなたにも、交差しないものを見つけるためにnot exists
を使用することができます。何ができることは、これを呼び出すときに、あなたのselect
にexists
機能を使用しています。
また、あなたはまた、バック両方のケースを引っ張ってleft join
を使用することができます。
t2.name
が
null
ある
select
*
from
table_one t1
left join table_two t2 on
t1.name = t2.name
何でも、あなたが交差点を持っていません。どこにいても、あなたはしません。もちろん、name
にunique
という制約がない場合は、重複する行が生成される可能性があります。
これは、このすべての上にいくつかの光を願って!
ありがとう、私はこのクエリを毎回table_oneの変更が実行する必要がありますか?テーブルの変更が発生したときに呼び出されるソートのコールバックを登録する方法はありますか? –
コールバックでは、自分のアプリケーションではなく、データベース自体を意味します。 –
素晴らしい!再度、感謝します! –