Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Porównanie dwóch tabel -> Wynik różnica x1 and y2 NOT IN (x2 and y2)
Forum PHP.pl > Forum > Przedszkole
-osaka-
Witam!
Proszę o pomoc w skonstruowaniu zapytania SQL.
W skrócie:
- importuje dane z dwóch plików do mysql do dwóch tabel
- tabele są identycznej budowy
- potrzebuję wyciągnąć różnice między tabelami ale potrzebuje sprawdzić dwa argumenty

Np.

  1. Tabela_1
  2. ID | TEXT1 | TEXT2
  3. ----------------------------
  4. 1 A A
  5. 2 A B
  6. 3 A C
  7. 4 A D
  8. 5 A A
  9. 6 A A
  10.  
  11. Tabela_2
  12. ID | TEXT1 | TEXT2
  13. ----------------------------
  14. 1 A A
  15. 2 A B
  16. 3 A C
  17. 4 A Z
  18. 5 B A
  19. 6 A B
  20.  
  21.  
  22. WYNIK Różnica TEXT2 & TEXT2
  23. ID | TEXT1 | TEXT2
  24. ----------------------------
  25. 4 A Z
  26. 5 B A


Wersja I: jeden warunek – działa !

  1. SELECT ID, TEXT1, TEXT2
  2. FROM Tabela_2
  3. WHERE
  4. TEXT1
  5. NOT IN ( SELECT TEXT1 FROM Tabela_1)


Wersja II: dwa warunki – Nie działa ! Proszę o pomoc!

  1. SELECT ID, TEXT1, TEXT2
  2. FROM Tabela_2
  3. WHERE
  4. TEXT1 AND TEXT2
  5. NOT IN ( SELECT TEXT1, TEXT2 FROM Tabela_1)



pmir13
1. Podzapytanie w nawiasie - znajdź wspólną część - zwykły join po zgadzających się obu tekstach, DISTINCT by wyeliminować niepotrzebne duplikaty.
2. Połącz do tabeli, od której chcesz odjąć przy pomocy LEFT JOIN - dla rekordów, których nie ma we wspólnych będzie NULL.

  1. SELECT tabela_2.* FROM tabela_2
  2. LEFT JOIN
  3. ( SELECT DISTINCT tabela_1.text1, tabela_1.text2 FROM tabela_1
  4. JOIN tabela_2
  5. ON tabela_1.text1 = tabela_2.text1 AND tabela_1.text2 = tabela_2.text2 ) wspolne
  6. ON tabela_2.text1 = wspolne.text1 AND tabela_2.text2 = wspolne.text2
  7. WHERE wspolne.text1 IS NULL
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.