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:
SELECT Z.ID_ZAP, Z.DATA_1, Z_DATA_2 ..... FROM ZAPYTANIA Z LEFT JOIN STATUSY S ON Z.ID_ZAP = S.ID_ZAP AND S.STATUS != 'Zakończono' ORDER BY ID_ZAP DESC
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ć...
Jeżeli użyję klauzuli WHERE czyli zrobię:
SELECT Z.ID_ZAP, Z.DATA_1, Z_DATA_2 ..... FROM ZAPYTANIA Z LEFT JOIN STATUSY S ON Z.ID_ZAP = S.ID_ZAP WHERE S.STATUS != 'Zakończono' ORDER BY ID_ZAP DESC
WHERE S.STATUS != 'Zakończono' OR S.STATUS IS NULL
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ę
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)