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
このクエリをに入れて、最新のtrigger
状態に保つことができます。intersects
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
列はすばらしいものですが、同期が取れなくなるという問題が発生する可能性があります。あなたができることは、これを呼び出すときexists
にあなたの関数を使用することですselect
:
select
*
from
table_one t1
where
exists (select 1 from table_two t2 where t2.name = t1.name)
not exists
交差しないものを見つけるためにも使用できます。
さらに、を使用しleft join
て両方のケースを引き戻すこともできます。
select
*
from
table_one t1
left join table_two t2 on
t1.name = t2.name
どこにでもt2.name
、null
交差点はありません。そうでないものは何でも、あなたはそうします。もちろん、にunique
制約がない場合、これにより重複行が生成される可能性がありますname
。
うまくいけば、これはこれらすべてにいくつかの光を当てます!