INSERT SELECT - jak nie dublować danych?
Piotr - 23-11-2005 11:04
INSERT SELECT - jak nie dublować danych?
Mam zapytanie kopiujące dane z jednej tabeli do drugiej
INSERT INTO tabela1 (nazwa, id_kol1, id_kol2) SELECT nazwa, id_kol1, id_kol2 FROM tabela2 WHERE id_kol1=22 and id_kol2=31
i to kopiuje ładnie ale jak uniknąć kopiowania rekordów o identycznej zawartości które już istnieją w bazie docelowej? Czyli jeśli zawartość wyjściowa tabeli przed zapytaniem jest
tabela1 nazwa='przyklad2', id_kol1=22, id_kol2=31
tabela2 nazwa='przyklad', id_kol1=22, id_kol2=31 nazwa='przyklad2', id_kol1=22, id_kol2=31 nazwa='przyklad3', id_kol1=22, id_kol2=31 nazwa='przyklad4', id_kol1=22, id_kol2=31
to chcę mieć skopiowane wszystko z tabeli2 poza rekordem z 'przyklad2'
Jak ułożyć zatem pytanie?
Morff - 23-11-2005 11:04
Dnia 22-11-2005 o 10:24:58 Piotr <piotr@bez.maila> napisał:
INSERT INTO tabela1 (nazwa, id_kol1, id_kol2) (SELECT nazwa, id_kol1, id_kol2 FROM tabela2 A WHERE id_kol1=22 and id_kol2=31 and not exists (select 1 from tabela1 B where a.nazwa=b.nazwa and a.id_kol1=b.id_kol1 and a.id_kol2=b.id_kol2)
-- Pozdrawiam Morff ---------------------- AQQ 141151
hubert depesz lubaczewski - 23-11-2005 11:04
Dnia 22.11.2005 Piotr <piotr@bez.maila> napisał/a: > Jak ułożyć zatem pytanie?
jedną metodę już dostałeś. inna: (depesz@[local]:5432) 10:52:01 [depesz] > select * from tabela1; nazwa | id_kol1 | id_kol2 -----------+---------+--------- przyklad2 | 22 | 31 (1 row)
(depesz@[local]:5432) 10:52:08 [depesz] > select * from tabela2; nazwa | id_kol1 | id_kol2 -----------+---------+--------- przyklad | 22 | 31 przyklad2 | 22 | 31 przyklad3 | 22 | 31 przyklad4 | 22 | 31 (4 rows)
(depesz@[local]:5432) 10:52:10 [depesz] > insert into tabela1 (nazwa, id_kol1, id_kol2) select nazwa, id_kol1, id_kol2 from tabela2 except select nazwa, id_kol1, id_kol2 from tabela1; INSERT
(depesz@[local]:5432) 10:52:36 [depesz] > select * from tabela1; nazwa | id_kol1 | id_kol2 -----------+---------+--------- przyklad2 | 22 | 31 przyklad | 22 | 31 przyklad3 | 22 | 31 przyklad4 | 22 | 31 (4 rows)
(depesz@[local]:5432) 10:52:41 [depesz] > select * from tabela2; nazwa | id_kol1 | id_kol2 -----------+---------+--------- przyklad | 22 | 31 przyklad2 | 22 | 31 przyklad3 | 22 | 31 przyklad4 | 22 | 31 (4 rows)
depesz
-- *------------------------------------------------------------------* szukam zleceniobiorcy: http://www.depesz.com/praca.txt *------------------------------------------------------------------*
Piotr - 23-11-2005 11:04
dzięki Wam wielkie :)
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
=?iso-8859-2?Q?=5BMySQL=5D_Wy=B6wietlenie_wszystkich_rekordow _zawierajacy?==?iso-8859-2?Q?ch_duplikat_a__moze_inna_struktura_bazy_danych ?=
Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8
[laik]Jak =?ISO-8859-2?Q?stworzy=E6/zaczac_tworzyc__ma=B3=B1?==?ISO-8859-2?Q?__baz=EA_danych_na_potrzeby_www=3F?=
[mysql] przenoszenie danych =?ISO-8859-2?Q?mi=EAdzy_tabelami_?==?ISO-8859-2?Q?w_r=F3=BFnych_bazach?=
Ksiazka - "Podstawowy =?ISO-8859-2?Q?wyk=B3ad_z_system=F3w_?==?ISO-8859-2?Q?baz_danych=22?=
Zrywanie =?ISO-8859-2?Q?po=B3aczen_z_baza_danych_-_pos?==?ISO-8859-2?Q?tgresql_=3C-=3E_odbc?=
Połączenie bazy danych z wykonaniem polaczenia telefonicznego
[oracle] Baza danych do kursy Introduction to Oracle9i:PL/SQL ? Skąd ją pobrać ?
[MySQL] - Wstawianie aktualnej daty do bazy danych - PHP i MySQL
zanotowane.pldoc.pisz.plpdf.pisz.plmisida.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|