[Firebird] Łączenie dwóch tabel i wyświetlenie różnicy
floran - 09-09-2006 01:06
[Firebird] Łączenie dwóch tabel i wyświetlenie różnicy
Witam !
Mam dwie tabele. Obydwie tabele zawierają po jednej kolumnie. tab1 ma 25tyś rekordów a tab2 33tyś rekordów. Nazwy kolumn dwóch tabel są te same oraz wartości praktycznie te same. W tab1 brakuje tych kilku tysięcy, które są w tab2 i na tych danych mi zależy. W jaki sposób połączyć tabele i napisać selecta aby otrzymać dane RÓŻNICOWE, czyli takie które są w tab2 a nie ma ich w tab1 a jak napisać selecta aby otrzymać TYLKO części wspólne ?
pozdrawiam
Artur Gancarz - 09-09-2006 01:07
Użytkownik floran napisał: > Witam ! > > Mam dwie tabele. Obydwie tabele zawierają po jednej kolumnie. tab1 ma 25tyś > rekordów a tab2 33tyś rekordów. Nazwy kolumn dwóch tabel są te same oraz > wartości praktycznie te same. W tab1 brakuje tych kilku tysięcy, które są w > tab2 i na tych danych mi zależy. > W jaki sposób połączyć tabele i napisać selecta aby otrzymać dane RÓŻNICOWE, > czyli takie które są w tab2 a nie ma ich w tab1 a jak napisać selecta aby > otrzymać TYLKO części wspólne ? > > pozdrawiam > >
Część wspólna to proste:
select kolumna from tab1,tab2 where tab1.kolumna=tab2.kolumna;
gdzie: "kolumna" to nazwa Twojej kolumny
Artur
Artur Gancarz - 09-09-2006 01:07
Użytkownik floran napisał:
> Witam ! > > Mam dwie tabele. Obydwie tabele zawierają po jednej kolumnie. tab1 ma 25tyś > rekordów a tab2 33tyś rekordów. Nazwy kolumn dwóch tabel są te same oraz > wartości praktycznie te same. W tab1 brakuje tych kilku tysięcy, które są w > tab2 i na tych danych mi zależy. > W jaki sposób połączyć tabele i napisać selecta aby otrzymać dane RÓŻNICOWE, > czyli takie które są w tab2 a nie ma ich w tab1 a jak napisać selecta aby > otrzymać TYLKO części wspólne ? > > pozdrawiam > >
Nie wiem jak w Firebird, ale w MySQL takie coś dla sprawdzenia "różnicy" działa:
select tab2.kolumna, tab1.kolumna as kontrola from tab2 left join tab1 on tab2.kolumna=tab1.kolumna where kontrola is null;
"kolumna" to nazwa Twojej kolumny
Działa to mniej więcej tak, że do wszystkich rekordów z tabeli drugiej dopasowuje "koniecznie" rekordy z tabeli pierwszej (warunek "on coś=coś"), a jeśli nie ma, to zostawia pute. Tutaj na końcu warunek "where" wyświetlający właśnie te, dla których nic nie znaleziono.
pozdrawiam Artur
m m - 09-09-2006 01:07
floran napisał(a): > Witam ! > > Mam dwie tabele. Obydwie tabele zawierają po jednej kolumnie. tab1 ma25tyś > rekordów a tab2 33tyś rekordów. Nazwy kolumn dwóch tabel są te same oraz > wartości praktycznie te same. W tab1 brakuje tych kilku tysięcy, które są w > tab2 i na tych danych mi zależy. > W jaki sposób połączyć tabele i napisać selecta aby otrzymaćdane RÓŻNICOWE, > czyli takie które są w tab2 a nie ma ich w tab1 a jak napisać selecta aby > otrzymać TYLKO części wspólne ? > > pozdrawiam > > a może zadziała ta jak w postgresql
query1 UNION [ALL] query2 query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2
INTERSECT returns all rows that are both in the result of query1 and in the result of query2. Duplicate rows are eliminated unless INTERSECT ALL is used.
EXCEPT returns all rows that are in the result of query1 but not in the result of query2. (This is sometimes called the difference between two queries.) Again, duplicates are eliminated unless EXCEPT ALL is used.
Ktoś mógł by powiedzieć czy to zadziała ?
wloochacz - 09-09-2006 01:07
[ciach] > Ktoś mógł by powiedzieć czy to zadziała ? Nie zadziała (fb nie zna INTERSECT), ale zadziała ze złączeniami.
-- wloochacz
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[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?=
Firebird - zmiana NULL na NOT NULL
[firebird] Czym =?ISO-8859-2?Q?zast=B1pi=E6_postgresowy_inte?==?ISO-8859-2?Q?rval_=3F?=
Insert do tabeli danymi z innej tabeli Firebird
[mysql] Wyszukanie =?ISO-8859-2?Q?rekord=F3w=28powiazane_tabel?==?ISO-8859-2?Q?e=29?=
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
Insert do tabeli z danych innej tabeli plus dodatkowa wartośćpola (Firebird)
zapytanie do =?ISO-8859-2?Q?dw=F3ch_tabel_z_limitem_wier?==?ISO-8859-2?Q?szy?=
[mysql] =?ISO-8859-2?Q?po=B3=B1czenie_tabel_wg_kolumn=2C_?==?ISO-8859-2?Q?nie_wierszy?=
zanotowane.pldoc.pisz.plpdf.pisz.plczterowers.keep.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 |
|