Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie MSSQL - wykluczenie pewnych wyników, Wydawało mi się banalne, a jakoś nie moge dać rady
mysz0n
post 6.11.2015, 14:45:08
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mysz0n 6.11.2015, 14:51:26
Go to the top of the page
+Quote Post
mmmmmmm
post 6.11.2015, 23:03:25
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


1. Operator <> a nie !=
2. Nie tak... Najprościej będzie jak zrobisz NOT IN (SELECT id_klienta FROM pierwsze_zapytanie)
Go to the top of the page
+Quote Post
netmare
post 12.11.2015, 21:52:57
Post #3





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 21:37