nataraj: (Default)
[personal profile] nataraj
Столкнулся с задачей...
Есть две таблицы с составным ключом...
Из второй надо удалить те элементы ключ которых уже занят в первой...

Для случая одиночного ключа все просто: delete from table2 where my_key in (select my_key from table1)
А вот как это сделать для случая составного ключа -- с ходу не осилил....

Вот он недостаток фундаментального образования...

Date: 2010-04-24 01:57 pm (UTC)
From: (Anonymous)
delete from table2 where *concat*(column1, column2) in ( select *concat*(column1, column2) from table1 )

где *concat* -- какая-то, на твой выбор, композиция из двух колонок

Date: 2010-04-24 01:59 pm (UTC)
From: [identity profile] kattea.livejournal.com
delete from table2 where my_key1||my_key2 IN (select my_key1||my_key2 from table1)
это для случая когда значения ключевых полей не пересекаются

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-овых значений ключей. Но более медленный вариант.

Date: 2010-04-24 02:01 pm (UTC)
ext_613079: Default userpic (Default)
From: [identity profile] shaplov.livejournal.com
О! EXISTS это то что надо!

Date: 2010-04-24 02:01 pm (UTC)
ext_613079: Default userpic (Default)
From: [identity profile] shaplov.livejournal.com
Спасибо!

Date: 2010-04-26 01:57 pm (UTC)
From: [identity profile] brevno-suchkov.livejournal.com
В оффтопике можно написать так, с двумя from:

delete from table1
from table1
join table2
on table1.key1 = table2.key1 and table1.key2 = table2.key2

Как на других серверах писать - не обучен )

Date: 2010-05-06 10:15 am (UTC)
ext_613079: Default userpic (Default)
From: [identity profile] shaplov.livejournal.com
Мама! O_O
Это мой мозг удовобоворить не способен! ;-)

Понятный мне ответ был выше, с оператором exists, и на мой взгляд он наиболее логичен...

Date: 2010-05-07 09:45 am (UTC)
From: [identity profile] brevno-suchkov.livejournal.com
А я наоборот, привык, мне джойны читать проще )
Если смущает два фрома, можно один забить:

delete table1
from table1 join table2
on table1.key1 = table2.key1 and table1.key2 = table2.key2

Для меня наоборот нагляднее, чем exists )

Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 10th, 2026 05:02 pm
Powered by Dreamwidth Studios