SQL-вопрос...
Apr. 24th, 2010 05:43 pmСтолкнулся с задачей...
Есть две таблицы с составным ключом...
Из второй надо удалить те элементы ключ которых уже занят в первой...
Для случая одиночного ключа все просто: delete from table2 where my_key in (select my_key from table1)
А вот как это сделать для случая составного ключа -- с ходу не осилил....
Вот он недостаток фундаментального образования...
Есть две таблицы с составным ключом...
Из второй надо удалить те элементы ключ которых уже занят в первой...
Для случая одиночного ключа все просто: delete from table2 where my_key in (select my_key from table1)
А вот как это сделать для случая составного ключа -- с ходу не осилил....
Вот он недостаток фундаментального образования...
no subject
Date: 2010-04-24 01:57 pm (UTC)где *concat* -- какая-то, на твой выбор, композиция из двух колонок
no subject
Date: 2010-04-24 01:59 pm (UTC)это для случая когда значения ключевых полей не пересекаются
delete from table2 t2 where EXISTS (select 1 from table1 t1 where t2.my_key2 = t1.my_key2 AND t2.my_key1 = t1.my_key1)
Это в любом случае за исключением NULL-овых значений ключей. Но более медленный вариант.
no subject
Date: 2010-04-24 02:01 pm (UTC)no subject
Date: 2010-04-24 02:01 pm (UTC)no subject
Date: 2010-04-26 01:57 pm (UTC)delete from table1
from table1
join table2
on table1.key1 = table2.key1 and table1.key2 = table2.key2
Как на других серверах писать - не обучен )
no subject
Date: 2010-05-06 10:15 am (UTC)Это мой мозг удовобоворить не способен! ;-)
Понятный мне ответ был выше, с оператором exists, и на мой взгляд он наиболее логичен...
no subject
Date: 2010-05-07 09:45 am (UTC)Если смущает два фрома, можно один забить:
delete table1
from table1 join table2
on table1.key1 = table2.key1 and table1.key2 = table2.key2
Для меня наоборот нагляднее, чем exists )