Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie MSSQL - wykluczenie pewnych wyników
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
mysz0n
Mam 3 tabele:
KLIENT, CECHA, CECHA_KLIENT

w KLIENT mam: id_klienta, imie, nazwisko, adres
w Cecha mam: id_cechy, nazwa_cechy
w CECHA_KLIENT mam: id_ck, ck_id_klienta, ck_id_cechy

Jeden klient możne mieć wiele cech.

Chce zobaczyć klientów z cechą 1 daje zapytanie:

  1. SELECT [id_klienta],[imie],[nazwisko],[adres]
  2. FROM [klient]
  3. LEFT JOIN [cecha]
  4. ON ck_id_klienta = id_klienta
  5. WHERE ck_id_klienta = 1


jest ok, ale chce wykluczyć klientów z cechą 2.

próbowałem przez:

  1. SELECT [id_klienta], [imie], [nazwisko], [adres]
  2. FROM [klient]
  3. LEFT JOIN [cecha]
  4. ON ck_id_klienta = id_klienta AND ck_id_klienta !=2
  5. WHERE ck_id_klienta = 1


ale nie działa.
mmmmmmm
1. Operator <> a nie !=
2. Nie tak... Najprościej będzie jak zrobisz NOT IN (SELECT id_klienta FROM pierwsze_zapytanie)
netmare
Coś się tu kupy nie trzyma:

Cytat(mysz0n @ 6.11.2015, 15:45:08 ) *
Chce zobaczyć klientów z cechą 1 daje zapytanie:

  1. SELECT [id_klienta],[imie],[nazwisko],[adres]
  2. FROM [klient]
  3. LEFT JOIN [cecha]
  4. ON ck_id_klienta = id_klienta
  5. WHERE ck_id_klienta = 1


gdybyś chciał oglądać z cechą 1 to:
- joinujesz zdaje się cecha_klient a nie cecha
- bez sensu jest left join, ze względu na warunki wynik taki sam jak inner joina, tylko wydajność niższa
- warunek Ci się nie zgadza

  1. SELECT [id_klienta],[imie],[nazwisko],[adres]
  2. FROM [klient]
  3. JOIN [cecha_klient]
  4. ON ck_id_klienta = id_klienta
  5. WHERE ck_id_cechy = 1



Cytat(mysz0n @ 6.11.2015, 15:45:08 ) *
jest ok, ale chce wykluczyć klientów z cechą 2.


Więc z joinami wyglądać by to mogło tak:

  1. SELECT [id_klienta],[imie],[nazwisko],[adres]
  2. FROM [klient]
  3. JOIN [cecha_klient] c1
  4. ON c1.ck_id_klienta = id_klienta AND c1.ck_id_cechy = 1
  5. LEFT JOIN [cecha_klient] c2
  6. ON c2.ck_id_klienta = id_klienta AND c2.ck_id_cechy = 2
  7. WHERE
  8. c2.id_ck IS NULL


Ale możesz się też zainteresować co to jest PIVOT i wymyślić jak może Ci pomóc w czytelnym i uniwersalnym ograniu tematu dla niezbyt dużej liczby zdefiniowanych cech.

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.