Hej.
Da się porównać 2 tabele o tej samej strukturze i jak w drugiej będzie więcej rekordów to dodać je (te które nie istnieją w pierwszej tabeli) do pierwszej tabeli i zapisać, używając baz Firebird?
Dzięki za sugestie. [soczek]
Hej.
Da się porównać 2 tabele o tej samej strukturze i jak w drugiej będzie więcej rekordów to dodać je (te które nie istnieją w pierwszej tabeli) do pierwszej tabeli i zapisać, używając baz Firebird?
Dzięki za sugestie. [soczek]
Zmęczony napisał(a)
Hej.
Da się porównać 2 tabele o tej samej strukturze i jak w drugiej będzie więcej rekordów to dodać je (te które nie istnieją w pierwszej tabeli) do pierwszej tabeli i zapisać, używając baz Firebird?Dzięki za sugestie. [soczek]
Cos takiego:
insert into tabela1 (as) select * from tabela2
where ID not in (select ID from tabela2 where tabela1.pole1=tabela2.pole1 and tabela1.pole2=tabela2.pole2 ...i tak dalej wymienić tu wszystkie odpowiadające sobie pola)
Być może da się to szybciej zrobić.
... WHERE ID NOT IN (SELECT ...
Różnie to działa w różnych wersjach - chodzi mi o wydajność. Kluczowe jest to co to znaczy "te które nie istnieją", czy jest jedna kolumna która o tym świadczy czy więcej. Jeśli wyznacznikiem jest klucz, sugerował bym użycie zapytania, mniej więcej takiego:
FOR
SELECT T1.ID, T1.POLE1, T1.POLE2 ...
FROM T1
LEFT JOIN T2 ON T2.ID=T1.ID
WHERE T2.ID IS NULL
INTO :ID, :POLE1, :POLE2
DO
INSERT INTO T2 (ID, POLE1, POLE2) VALUES :ID, :POLE1, :POLE2
@Mariusz - sposób przez Ciebie podany będzie działał, ale tak jak mówię różnie to bywa z wydajnością. Czasem jawne podanie ID'ków w IN'ie jest o wiele szybsze niż wstawienie w tym miejscu podzapytania.
b
OK rozumiem.
Teraz to tylko przenieść do Delphi do komponentów IBX.
Generalnie chodzi o to, że ten sam program używam na PC i laptopie, którego wynosze gdzieś tam w drogę. Wtedy też dodaję nowe rekordy.
Powiedzmy, że mam na PC 50 rekordów i te same 50 w laptopie. Gdzieś tam kiedyś na laptopie dodałem nowych 15 i teraz te 15 chciałbym przenieść do PC i zapisać je Transakcją na commit itd.
Wiem, że mówłgbym nadpisywać plik z bazą (cośtam.gdb), ale chcę to zrobić w bardziej elegancki sposób. :-)
Spróbuję waszych zapytań wtrącić do Delphi do IBQuery itd. Może się uda.
Dzięki.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.