ZALOGUJ SIĘ
login:
hasło:
przypomnij hasło
załóż konto użytkownika
(i zobacz kilka porad gratis)
   
WYSZUKIWARKA I DZIAŁY
całe porady  tytuły
zaznacz działy do przeszukania
(brak wyboru = wszystkie działy)
PHP
MySQL >
PostgreSQL
SQLite
Perl
Java
XML
XSLT
XPath
WML
SVG
RegExp
Wyszukiwarki
Ochrona
VBScript
Google Plus
XHTML/CSS
JavaScript
Grafika
Flash
Photoshop
Windows
Linux
Bash
Apache
Procmail
E-biznes
Explorer
Opera
Firefox
Inne porady
   
KURSY, DOKUMENTACJE
Własne:
XHTML/CSS
JavaScript
ActionScript
WML, RSS, SSI
Pozostałe:
PHP
MySQL
Java API
więcej...
   
użytkowników online: 17
W CZYM MOGĘ POMÓC?


   
OPINIE UŻYTKOWNIKÓW
Porady zamieszczone tutaj przez Darka są pomocne w wielu chwilach. Wielokrotnie tworząc jakiś złożony serwis korzystam z tych porad. Można by tworzyć samemu te skrypty, ale tak naprawdę czy nie lepiej jest wziąć skrypt z tej strony i zmodyfikowac go dla swoich potrzeb? Wprawdzie możemy taki skrypt napisać sami, ale po co, skoro stracimy czas na coś, co ktoś juz napisał, przetestował i może zagwarantować, że działa poprawnie. Któryś raz z rzędu opłacam abonament i nie raz jeszcze opłacę. Kawał dobrej roboty i ogrom wiedzy w jednym miejscu.

Piotr Karamański
Design Studio

   
GALERIA FOTOGRAFII
   
PORADY - tysiące sprawdzonych rozwiązań dla programistów i webmasterów
aktualizacja porady: 2007-04-30 19:50:57

[MySQL] Jak wybrać różnicę zbiorów, czyli zasymulować polecenie EXCEPT?

PROBLEM

Chcesz z dwóch tabel wybrać tylko te rekordy, które występują w jednej z tabel, a nie występują w drugiej.

ROZWIĄZANIEnoselect

Różnicę zbiorów w innych bazach danych łatwo uzyskasz stosując operator EXCEPT między zapytaniami. Ponieważ w MySQL polecenie nie zostało jeszcze zaimplementowane, musimy posłużyć się tradycyjnymi metodami wybrania elementów wspólnych. Zrobimy to w sprytny sposób?

Na początek stwórzmy przykładową bazę danych. Niech zawiera liczby i słowa:

CREATE TABLE tabela1 (
  id INT NOT NULL PRIMARY KEY auto_increment,
  nazwa VARCHAR(50),
  liczba INT
);
INSERT INTO tabela1 VALUES ("","okno",5);
INSERT INTO tabela1 VALUES ("","okno",7);
INSERT INTO tabela1 VALUES ("","ptak",3);
INSERT INTO tabela1 VALUES ("","ryba",2);
INSERT INTO tabela1 VALUES ("","ryba",3);
INSERT INTO tabela1 VALUES ("","pies",5);
INSERT INTO tabela1 VALUES ("","kwiat",7);
INSERT INTO tabela1 VALUES ("","kwiat",7);
 
CREATE TABLE tabela2 (
  id INT NOT NULL PRIMARY KEY auto_increment,
  nazwa VARCHAR(50),
  liczba INT
);
INSERT INTO tabela2 VALUES ("","pies",9);
INSERT INTO tabela2 VALUES ("","mysz",1);
INSERT INTO tabela2 VALUES ("","okno",3);
INSERT INTO tabela2 VALUES ("","kwiat",7);
INSERT INTO tabela2 VALUES ("","mysz",4);
INSERT INTO tabela2 VALUES ("","szafa",5);
INSERT INTO tabela2 VALUES ("","pies",5);
INSERT INTO tabela2 VALUES ("","pies",5);

Całość wygląda następująco:

tabela1:                  tabela2:
+----+--------+--------+  +----+--------+--------+
| id | nazwa  | liczba |  | id | nazwa  | liczba |
+----+--------+--------+  +----+--------+--------+
|  1 | okno   |      5 |  |  1 | pies   |      9 |
|  2 | okno   |      7 |  |  2 | mysz   |      1 |
|  3 | ptak   |      3 |  |  3 | okno   |      3 |
|  4 | ryba   |      2 |  |  4 | kwiat  |      7 |
|  5 | ryba   |      3 |  |  5 | mysz   |      4 |
|  6 | pies   |      5 |  |  6 | szafa  |      5 |
|  7 | kwiat  |      7 |  |  7 | pies   |      5 |
|  8 | kwiat  |      7 |  |  8 | pies   |      5 |
+----+--------+--------+  +----+--------+--------+

Różnicą zbiorów dla pola nazwa jest oczywiście:

+--------+--------+
| nazwa  | liczba |
+--------+--------+
| ptak   |      3 |
| ryba   |      2 |
| ryba   |      3 |
+--------+--------+

Tylko ptak i ryba z pierwszej tabeli nie występują w drugiej.

Jeżeli wykonamy różnicę dla obu pól nazwa i liczba otrzymamy:

+--------+--------+
| nazwa  | liczba |
+--------+--------+
| okno   |      5 |
| okno   |      7 |
| ptak   |      3 |
| ryba   |      2 |
| ryba   |      3 |
+--------+--------+

Bo tylko pies 5 i kwiat 7 powtarzają się w drugiej tabeli. A oto zapytanie, które pozwala pobrać różnicę zbiorów:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
UWAGA! To tylko fragment strony! Całą zobaczysz po opłaceniu abonamentu!

ZALOGUJ SIĘ I ZAMÓW ABONAMENT ABY KORZYSTAĆ Z TEJ CZĘŚCI SERWISU
login:
hasło:
przypomnij hasło
załóż konto użytkownika
(i zobacz kilka porad gratis)
Dostęp do oglądanej strony jest płatny.
Całą zawartość strony zobaczysz
po zalogowaniu się i opłaceniu abonamentu.
 
Jeżeli nie masz konta użytkownika, założ konto!
   
Oto garść powodów, dla których warto założyć konto użytkownika:
Założenie konta użytkownika jest proste i bezpłatne.
Od razu zobaczysz kilka wybranych porad gratis.
Po opłaceniu abonamentu otrzymasz dostęp do wszystkich porad.
Przystąpisz do Programu Partnerskiego, który pozwala uzyskać darmowy abonament!
Zaprenumerujesz przydatny newsletter z poradami i nowościami.
Będziesz mieć dostęp do własnej, wygodnej aktówki i profilu.
Zyskasz możliwość korzystania z różnych promocji i upustów dla klientów serwisu.
Oto garść powodów, dla których warto zamówić abonament:

W jednym miejscu znajdziesz tysiące fachowych porad, kursy, encyklopedię pojęć oraz przydatne narzędzia, dzięki czemu nie tracisz czasu, impulsów telefonicznych i pieniędzy na pozyskiwanie wiedzy. Tutaj dostaniesz gotowe i sprawdzone rozwiązania problemów, z którymi spotykasz się w praktyce.

Dzięki poradom dowiesz się, w jaki sposób wykorzystać najnowsze technologie, aby tworzyć profesjonalne serwisy i rozwiązania. Doradzę Ci, jak skonstruować i wypromować swoje strony, zwiększyć oglądalność, pozyskać klientów i rozwinąć biznes w Internecie, który będzie przynosił zyski!

Kody programów i skrypty działają natychmiast po wstawieniu ich na strony WWW. Tylko tutaj znajdziesz tak wiele unikatowych algorytmów, autorskich pomysłów i przydatnych artykułów. Dowiesz się, jak zapewnić bezpieczeństwo, zwiększyć wydajność oprogramowania i poprawić jakość serwisów WWW i baz danych.

Od kilkunastu lat zajmuję się zawodowo programowaniem oraz tworzeniem stron WWW, co gwarantuje bardzo wysoką jakość i skuteczność opisywanych rozwiązań. Potwierdzają to opinie użytkowników. Możesz też liczyć na pomoc i wsparcie przy wdrażaniu porad na własnej stronie.

Nie musisz wydawać kilku tysięcy złotych na programistów, konsultantów, promocję czy też reklamę swojej witryny. Te same efekty osiągniesz czytając porady i stosując się do konkretnej wiedzy, która podana jest w sposób przyjazny nawet dla laika.

Nigdzie nie kupisz książek, czasopism i publikacji, które w cenie abonamentu dostarczą Ci tak wiele gotowych rozwiązań. Na żadnych szkoleniach i kursach nie zdobędziesz tylu praktycznych umiejętności i wiadomości. Dzięki zdobytej wiedzy znacznie podniesiesz swoje kwalifikacje i znajdziesz o wiele lepszą pracę.

Z serwisu korzystają zarówno początkujący webmasterzy, jak i największe polskie firmy, banki, dostawcy usług internetowych, wykładowcy, webdeweloperzy oraz agencje interaktywne. To potwierdzenie jakości i wysokiego poziomu informacji - sprawdzanej i weryfikowanej w praktyce przez wielu niezależnych klientów.

Zamawiając abonament pomagasz rozwijać serwis, który będzie Ci służyć jeszcze większą ilością porad i rozwiązań, lepszym wsparciem technicznym oraz unikatowymi, fachowymi publikacjami, których realizacja wymaga ogromnych nakładów czasu i pracy.

Skorzystasz z Programu Partnerskiego - biorąc w nim udział możesz zapewnić sobie BEZPŁATNY dostęp do serwisu z poradami!

Słowa kluczowe dla porady

baza danych mysql, bazy danych, kurs mysql, unikatowe rekordy, left join

 
  © 1996-2017 & Reporter.plo serwisieabonamentwarunki korzystaniaNocleg Dojazd MapaRSSCookieskontakt