Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[ACCESS] Kwerenda wyszukująca zmienione pola



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Oprogramowanie biurowe
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
szanlu



Dołączył: 04 Gru 2015
Posty: 12

PostWysłany: Pon Lut 12, 2018 9:42 pm  OP    Temat postu: [ACCESS] Kwerenda wyszukująca zmienione pola Odpowiedz z cytatem Pisownia

Problem niby prosty ale nie bardzo mogę sobie poradzić.

Dwie tabela A i B. W każdej kolumna K1 i K2.
Tabela A ma w K1 wpisaną wartość X tabela 2 ma w K1 wpisaną wartość X. W K2 tabela A ma wpisaną wartość 1,2 a tabela B ma w tej kolumnie wpisaną wartość 1,2,3,3. Oznacza to, że stany poszczególnych rekordów zmieniają się w czasie poprzez zmianę wartości K2. Jak wyrzucić w wyniku kwerendy wszystkie rekordy z K1 mające w K2 tabeli B inne wartości niż w K2 tabeli A?
Co oznacza, że chcę sprawdzić stany których rekordów zmieniły się bez względu na ich wartość.

Kwerenda wyszukująca duplikaty nie chce zadziałać tak jak chcę ponieważ wyszukuje tylko rekordy z tabeli B których nie ma w tabeli A. Nie wyszukuje natomiast rekordów z tabeli A których stan zmienił się w tabeli B.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
mrowek



Dołączył: 28 Maj 2005
Posty: 330
Skąd: pniewy wlkp

PostWysłany: Pon Lut 12, 2018 11:18 pm      Temat postu: Odpowiedz z cytatem Pisownia

jak te dane sa zaprezentowane i czym sa te tabele powiazane (klucz) ?


bo chyba potrzebujesz full outer joina który ci zlączy wszystkie powiązane pozycje oraz te które nie występują po obu stronach zlączenia ( sa rozne )

nie wiem czy obecna implementacja accessa obsluguje ten typ joina, wiec prawdopodobnie trzeba robic left join dla dwoch polowek zbiorow i zrobic unie,

tutaj jest wytlumaczone, po angielsku + sql + obrazki tlumaczace: https://www.databasejournal.com/features/msaccess/article.php/3516561/Implementing-the-Equivalent-of-a-FULL-OUTER-JOIN-in-Microsoft-Access.htm

(albo kompatybilnosc z sql92 i tam moze bedzie full outer join)

potwierdz te dane ktore w poscie jaka dokladnie wygladaja, bo jest miszmasz i ciezko odgadnac. (zrzut tabelki z excela albo cos podobnego - aby zobrazowac dane i klucze )
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
szanlu



Dołączył: 04 Gru 2015
Posty: 12

PostWysłany: Wto Lut 13, 2018 10:33 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

mrowek napisał:
jak te dane sa zaprezentowane i czym sa te tabele powiazane (klucz) ?

potwierdz te dane ktore w poscie jaka dokladnie wygladaja, bo jest miszmasz i ciezko odgadnac. (zrzut tabelki z excela albo cos podobnego - aby zobrazowac dane i klucze )


Tabele są powiązane kluczem w postaci pola składającego się z ciągu znaków ABC012345.
W obydwu tabelach ten ciąg znaków obrazuje unikatowy numer zamówienia w K1.
W K2 mamy stany zamówienia zmieniające się w czasie. Co kilka dni generowana jest nowa tabela w której zamówienie ABC012345 może (ale nie musi) zmienić swój stan.
Chodzi o to aby wyłapać zamówienia które zmieniły swój stan od ostatniego raportu.

BTW. dzięki za naprowadzenie ...
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
mrowek



Dołączył: 28 Maj 2005
Posty: 330
Skąd: pniewy wlkp

PostWysłany: Wto Lut 13, 2018 12:18 pm      Temat postu: Odpowiedz z cytatem Pisownia

http://sqlfiddle.com/#!17/145d0/1
http://sqlfiddle.com/#!17/145d0/14


Kod:


create table a  (
    id int
   ,k1 varchar(30)
   ,k2 varchar(30)
  );
create table b (
    id int
  , k1 varchar(30)
  , k2 varchar(30)
);

insert into a values (1, 'a', 'a'),
                 (2, 'b', 'b'),
                 (3, 'c', 'd'),
                 (4, 'brak_w_b','b'),
                 (6, 'd','inna_k2')
                 ;
insert into b values (1, 'a', 'a'),
                 (2, 'inna_k1', 'b'),
                 (3, 'c', 'd'),
                 (5, 'brak_w_a','b'),
                 (6, 'd','e')
                 ;




full outer join :
Kod:

select  * from a full outer join b on a.id = b.id
where a.k1 != b.k1 or a.k2 != b.k2 or a.id is null or b.id is null
;



inner join z unionami:
Kod:

select  * from a join b on a.id = b.id
where    a.k1 != b.k1
      or a.k2 != b.k2  

union  
select  * from a left join b on a.id = b.id where b.id is null
union  
select * from a right join b on a.id = b.id where a.id is null

Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
szanlu



Dołączył: 04 Gru 2015
Posty: 12

PostWysłany: Pią Lut 16, 2018 9:08 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Wywala się na poziomie zapytań SQL
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
szanlu



Dołączył: 04 Gru 2015
Posty: 12

PostWysłany: Nie Lut 18, 2018 10:47 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dla ułatwienia wstawiam mały przykład zbudowany na dwóch tabelach zamówień ze zmieniającymi się stanami.


Przykład.zip
 Opis:

Pobierz
 Nazwa pliku:  Przykład.zip
 Wielkość pliku:  19.24 KB
 Pobierano:  17 raz(y)

Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
mrowek



Dołączył: 28 Maj 2005
Posty: 330
Skąd: pniewy wlkp

PostWysłany: Pon Lut 19, 2018 5:17 pm      Temat postu: Odpowiedz z cytatem Pisownia

sqle są na składni postgresqla, wymagają lekkiej modyfikacji aby pasowały do accessa
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
andie



Dołączył: 17 Lut 2017
Posty: 3

PostWysłany: Nie Lut 25, 2018 8:19 pm      Temat postu: Odpowiedz z cytatem Pisownia

O to chodzi?

Kod:
SELECT T01.Numer_zamówienia, T01.Stan_zamówienia As Stan01, T02.Stan_zamówienia As Stan02
FROM [Tabela A_02012018] as T02 LEFT JOIN [Tabela A_01012018] As T01 ON T02.Numer_zamówienia = T01.Numer_zamówienia
WHERE T01.Stan_zamówienia<>T02.Stan_zamówienia;


andie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Oprogramowanie biurowe Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.13193 sekund, zapytan = 13
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |