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
.
Надеюсь, это проливает некоторый свет на все это!