[Access] Porównanie 2 tabel

0

Witam. Chciałbym porównać ze sobą 2 tabele. Każda z nich składa się z 2 kolumn. Poniżej przedstawiam mniej więcej zarys tych tabel:

Tabela1

NUMER  ZNAK
7777     A
8888     B
7777     B

Tabela2

NUMER  ZNAK
7777     C
1111     B
7777     B

Chciałbym je ze sobą porównać i jako wynik otrzymać wiesze z Tabela2 które występują w Tabela1 oraz te które występują tylko w Tabela2. Z pierwszą częścią sobie poradziłem ale problem mam z drugim porównaniem które ma znaleźć różnice. Poniżej zamieszczam kod który w zasadzie jest przerobioną kwerendą tej pierwszej części.

SELECT Tabela2.NUMER, Tabela2.ZNAK
FROM Tabela2 INNER JOIN Tabela1 ON Tabela2.NUMER = Tabela1.NUMER
WHERE Tabela2.ZNAK<>TABELA1.ZNAK;

Jako wynik przy tym zestawie danych powinno pokazać 7777 C i 1111 B. Prosiłbym Was o pomoc bo nie mam pojęcia co jest nie tak.

0
SELECT t2.Numer, t2.Znak
FROM Tabela2 t2
CROSS JOIN Tabela1 t1
WHERE t2.Numer <> t1.Numer AND t2.Znak <> t1.Znak

a jeżeli access nie wspiera CROSS JOIN to iloczyn kartezjański można również uzyskać stosując składnię z przecinkiem:

SELECT t2.Numer, t2.Znak
FROM Tabela2 t2, Tabela1 t1
WHERE t2.Numer <> t1.Numer AND t2.Znak <> t1.Znak
0

Powracam do tego tematu ponownie. Przetestowałem to co napisałeś ale nie bardzo to działa. Wróciłem więc do rozwiązania które sam zrobiłem i postarałem się je jakoś przeanalizować. Teoretycznie kwerenda działa ok ponieważ częściowo zwraca szukane przeze mnie wartości problem jest chyba jednak nadal w tym złączeniu. Nie wiem jak zmusić Access do analizowania całych wierszy :( Analizując wynik kwerendy zauważyłem że Access zwraca wartości które pojawiają się tylko w Tabeli2 ale pod warunkiem że w Tabeli1 jest użyty jakiś numer z Tabeli2 :) zamotałem trochę ale dla rozjaśnienia dodam że tak jak już wspomniałem dla podanych powyżej danych jako wynik powinienem dostac 7777 C i 1111 B przy użyciu tej kwerendy jako wynik dostanę tylko 7777 C i to w dodatku 2 razy. Dlaczego? A no dla tego że numer 1111 nie istnieje w ogóle w tabeli1, gdybym go dopisał i przypisał mu znak np. Ł to wynik będzie już poprawny a jesli chodzi o powtórzenie wyniku to dzieje się to dla tego iż numer 7777 wystepuje w tabeli1 2 razy (gdyby wystepował 4 razy to wynik powtórzony był by 4 razy).

Prosiłbym Was bardzo o pomoc bo ta kwerenda bardzo ułatwiłaby mi pracę ale nie mam już pojęcia co jest nie tak.

0

Drugie zapytanie na 100% działa, a już nie mój problem że nawet przekopiować nie potrafisz... żal

user image

0

Ok może mój błąd bo podałem za mało danych i fart chciał że dla tych przykładowych jest ok ale dopisz sobie w Tabeli1 np wartość 9999 G i wynik kwerendy będzie już zupełnie inny. Oprócz tego że wartości się powtórzą co nie jest jakimś problemem to pojawi się jeszcze wartość 7777 B która występuje w obydwu tabelach :/

0

Przy założeniu, że Numer jest typu Liczbowego...

SELECT t2.Numer, t2.Znak
FROM Tabela2 t2
WHERE CStr(t2.Numer)+t2.Znak NOT IN (SELECT CStr(t1.Numer)+t1.Znak FROM Tabela1 t1);
0

A gdyby jednak numer był tekstem?? W rzeczywistości dane które będę wprowadzał w polu numer będzie to numer porozdzielany "-" i "/" (np. 0432-4242-331-776865/09 ) więc raczej pasował by tu typ tekstowy, chyba że się mylę.

0

Jeżeli pole jest typu tekstowego to nie musisz stosować funkcji CStr() pozostała część zapytania bez zmian.

0

Super dzięki wielkie. Jak na razie działa i myślę że będzie działać :) Jeszcze raz wielkie dzięki

0

Witam. mam podobny problem z napisaniem kwerendy , która umożliwi mi porównanie dwóch tabel oraz utworzenie pomocniczej tabeli zawierającej niespójne dane.

user image
Rys.1 Rysunek przedstawia budowę tabeli z różnymi typami danych.
Tabela2 jest tak samo zbudowana.
user image
Rys.2 Tabele zawierają nie spójność danych.

barze można pobrać z : https://www.yousendit.com/download/MEtSTXRUQ0NsUit4dnc9PQ

0

Po pierwsze musisz po czymś złączyć te tabele złączyć. Gdzie chcesz znaleźć różnice, w których kolumnach?
select * from tab1
inner join tab2 on <warunek złączenia>
where <warunki różnic> - coś a la tab1.Col1 <> tab2.Col2 or ...

0

Chciałbym otrzymać tabele która będzie zawierała wszystkie kolumny. Wynikiem z podanego prze ze mnie przykładu powinna być tabela z 3 rekordami. Pominięty powinien być tylko pierwszy rekord ponieważ nie zawiera żadnej różnicy.

0

Jaką masz wiedzę o sql?
Po jakich polach chcesz złączyć rekordy z obu tabel?

1 użytkowników online, w tym zalogowanych: 0, gości: 1