Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Łącznie dwóch tabel
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
lukpio3
Witajcie,
Mam problem z pewnym prostym zapytaniem. Mam dwie tabele z tym że druga powstała później więc ma mniejszy zakres danych. Potrzebuję teraz zrobić selecta aby wyświetlić zawartość tabeli pierwszej w taki sposób aby po połączeniu z tabelą 2 pominął określone rekordy czyli wyświetla całą tabelę 1 natomiast wiersze które dają się połączyć z tabelą 2 warunkowo pominął. I mam takie zapytanie:

  1. SELECT Z.ID_ZAP, Z.DATA_1, Z_DATA_2 .....
  2. FROM ZAPYTANIA Z
  3. LEFT JOIN STATUSY S ON Z.ID_ZAP = S.ID_ZAP
  4. AND S.STATUS != 'Zakończono'
  5. ORDER BY ID_ZAP DESC


Pominąłem tu wypisywanie wszystkich danych (DATA_1, DATA_2 ...). W wyniku tego zapytania oczekiwałem że rekordy gdzie STATUS ma wartość 'Zakończono' zostaną pominięte. Natomiast tak się nie dzieje. Wyświetla wszystko wraz z rekordami gdzie status ma wartość Zakończono.
mmmmmmm
Rozumiem, że tu masz dwa problemy. Pierwszy z tymi tabelami. Możesz go załatwić przez LEFT JOIN z użyciem NULL. Czyli:
SELECT n.* FROM nowa n LEFT JOIN stara s ON s.id=n.id WHERE s.id IS NULL

W tym drugim musisz doczytać jak się zachowuje warunek we WHERE, a jak w (LEFT) JOIN.
Pza tym, jak dajesz we WHERE warunek na tabelę z LEFT JOIN (oprócz sprawdzenia IS NULL), to tego LEFT możesz sobie darować...
lukpio3
Jeżeli użyję klauzuli WHERE czyli zrobię:
  1. SELECT Z.ID_ZAP, Z.DATA_1, Z_DATA_2 .....
  2. FROM ZAPYTANIA Z
  3. LEFT JOIN STATUSY S ON Z.ID_ZAP = S.ID_ZAP
  4. WHERE S.STATUS != 'Zakończono'
  5. ORDER BY ID_ZAP DESC


To oczywiście nie pokazuje mi wierszy gdzie status jest równy Zakończono ale też nie pokazuje mi wierszy z pierwszej tabeli dla których w drugiej kompletnie nie ma nic a tak nie może być. Pokazuje mi wtedy wyłącznie część wspólną obu tabel co jest błędem. Siedzę, kombinuję, nie mogę tego rozgryźć. Bo tabela 1 ma kilkaset wierszy, tabela druga tylko kilkadziesiąt ponieważ była niedawno dołożona. Muszę wyświetlić wszystkie rekordy których nie mogę z JOIN-ować z tabelą 2 + rekordy które się JOIN-ują ale pod warunkiem że status z tabeli 2 jest różny od Zakończono.
trueblue
  1. WHERE S.STATUS != 'Zakończono' OR S.STATUS IS NULL
lukpio3
Co prawda rozwiązałem już problem poprzez kilka selectów ale to mało eleganckie rozwiązanie. Dodałem do tego co miałem Twój warunek i działa. Dzięki wielkie za pomoc. O to właśnie chodziło. Próbowałem robić tak jak napisałeś z NULL-em ale dawałem złe złączenie bo robiłem AND zamiast OR co było moim błędem. Jeszcze raz dziękuję smile.gif
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.