Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Microsoft SQL Server / MSDE _ Zapytanie MSSQL - wykluczenie pewnych wyników

Napisany przez: mysz0n 6.11.2015, 14:45:08

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.

Napisany przez: mmmmmmm 6.11.2015, 23:03:25

1. Operator <> a nie !=
2. Nie tak... Najpro¶ciej będzie jak zrobisz NOT IN (SELECT id_klienta FROM pierwsze_zapytanie)

Napisany przez: netmare 12.11.2015, 21:52:57

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.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)