Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Podpowiedzcie z NOT IN ?
skleps
post
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

Ostrzeżenie: (0%)
-----


mysql5 - Tabela A zawiera cechę (EAN) w dwóch kolumnach kol1 i kol2. Co najmniej w jednej z nich jest cecha, czyli wpisany jakiś kod EAN, a druga kolumna jest pusta a czasem są wpisane dwa kody (oczywiście w obu kolumnach).
Dostawca dostarcza tabele B, w której jest kolumna "kolean", która powinna być zawsze uzupełniona. Muszę:
1. znaleźć rekordy, któe są w tabeli A a nie ma ich w tabeli B
2. znaleźć rekordy, któe są w tabeli B a nie ma ich w tabeli A
jak to zrobić łatwo, przyjemniej i w miarę optymalnie?

Na moje oko:
Ad.2.
SELECT * FROM B WHERE kolean NOT IN (SELECT kol1, kol2 FROM A WHERE kol1<>'' OR kol2<>'')

Ale mam wątpliwość do przypadku 1., wiec proszę o jakieś sugestie, bo taka konstrukcja wydaje mi się z lekka porąbana:

SELECT * FROM A WHERE (kol1 NOT IN (SELECT kolean FROM B WHERE jakistamwarunekpomocniczy)) OR (kol2 NOT IN (SELECT kolean FROM B WHERE jakistamwarunekpomocniczy))

Oczywiście zawsze mogę lecieć rekord po rekordzie, np wziąc wszystkie rekordy z bazy B, porównywać rekord po rekordzie z A i w zalezności od wyniku robić coś z odpowiedzią, wtedy będę miał "obrobione" wszystkie rekordy w bazie B.
Zaś znalezienie rekordów z A, których nie ma w B - lecieć rekord po rekordzie po bazie A i tylko reagowac na takie, których nie ma w tabeli B.
No ale to już raczej będzie wybitnie nieoptymalne i liczba selectów będzie ładna.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zauważ, że raz masz do sprawdzenia jedną, a raz 2 kolumny... By to uzgodnić, można użyć UNION choćby. Robisz zwykły UNION na tej samej tabeli, wybierając raz jedną, a raz drugą kolumnę. W ten sposób wyciągniesz wszystkie unikatowe EAN. Oczywiście musisz brać niepuste EAN. W ten sposób można jednak tylko uzyskać wartości EAN unikatowe. Jeśli chcesz wszystkie wiersze wyciągnąć, musisz jeszcze ciutkę dalej pociągnąć.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 13:41