SELECT wybierający kilka wartości na podstawie jednej

0

Witam, mam problem z utworzeniem SELECT'a, który będzie sprawdzał kolumnę 'WARTOŚĆ' i jeśli pojawi się w niej jakaś atrybut (w moim przypadku "Intel Socket 1159") to wtedy pokaże resztę atrybutów dla danego TOWARU. Przykładowo chcę wyświetlić wszystkie atrybuty dla "Płyt głównych" gdy w polu wartość pojawi się atrybut "Intel Socket 1159", czyli ma pojawić się (poza "Intel Socket 1159") jeszcze "P55","DDR3", "PCI-E", "SATA". Czy da się coś takiego stworzyć? Wstępnie zrobiłem coś takiego

SELECT produkt, producent, nazwa_towaru, wartosc
FROM Typ_produktu R, Producenci P, Towary T, Atrybuty_towarow A
WHERE P.id_producenta=T.id_producenta AND T.Id_towaru=A.id_towaru AND R.id_produktu=T.id_produktu
AND wartosc IN ('Intel Socket 1156')

(pojawiają się wszystkie produkty których wartość to 'Intel Socket 1156' co w sumie jest oczywiste)

wartosc IN ('Intel Socket 1156','DDR3','SATA','PCI-E')

(teraz pojawią się wszystkie produkty, których wartości są z tych w nawiasie, ale nie zawsze pojawią się te, dla których jest jednocześnie wartość 'Intel Socket 1156', a mi właśnie na tym zależy, żeby zawsze była wartość 'Intel Socket 1156' a oprócz nich pojawiły się pozostałe wartości)

Tutaj fragment SELECTu -> http://img808.imageshack.us/img808/1856/rrrrk.png
Działam w systemie InterBase 8.1

Mam nadzieję, że w miarę jasno się wyraziłem ;) Liczę na waszą pomoc. Pozdrawiam

0

pokaż tabelki

1

W pierwszej chwili nie doczytałem o co biega... Masz dwa rozwiązania:

  1. Dojoinuj tebelkę z której bierzesz pole wartość po polu id_towaru i załóż na niej warunek taki jak w Twoim pierwszym zapytaniu.
  2. Użyj podzapytania w którym odfiltrujesz sobie towary z potrzebnym atrybutem.
0
AdamPL napisał(a)

W pierwszej chwili nie doczytałem o co biega... Masz dwa rozwiązania:

  1. Dojoinuj tebelkę z której bierzesz pole wartość po polu id_towaru i załóż na niej warunek taki jak w Twoim pierwszym zapytaniu.
  2. Użyj podzapytania w którym odfiltrujesz sobie towary z potrzebnym atrybutem.

AD1 Chyba o to chodziło?

SELECT produkt, producent, nazwa_towaru, wartosc
FROM Typ_produktu R, Producenci P, Towary T, Atrybuty_towarow A JOIN Atrybuty_towarow ATO ON ATO.id_towaru=T.id_towaru
WHERE P.id_producenta=T.id_producenta AND T.Id_towaru=A.id_towaru AND R.id_produktu=T.id_produktu AND wartosc IN ('Intel Socket 1156');

Ładnie pojawiają się wszystkie produkty, które mają tę wartość "IS1", ale chciałbym,żeby w jeszcze następnej kolumnie pojawiały się pozostałe atrybuty dla tych moich "Płyt głównych" w sumie jest ich 5. Ten warunek dodany na samym końcu blokuje pokazywanie innych wartości, nie da się go dodać tylko do kolumny powstałej z samego JOIN'a?

Chciałbym abo to wyglądało tak (głownie chodzi mi o to jak dorobić jeszcze tą ostatnią kolumnę) -> http://img269.imageshack.us/img269/2936/warbn.png

Tabelki, które wykorzystuję do zapytania -> http://img832.imageshack.us/img832/1193/tabm.png

0
AdamPL napisał(a)
SELECT 
 tp.produkt
,p.producent
,t.nazwa_towaru
,a2.wartosc
,a.wartosc
FROM Typ_produktu tp
INNER JOIN Towary t ON t.id_producenta=tp.id_producenta
INNER JOIN Producenci p ON p.id_producenta=t.id_producenta
INNER JOIN Atrybuty_towarow a ON a.Id_towaru=t.id_towaru
INNER JOIN Atrybuty_towarow a2 ON a2.id_towaru=t.id_towaru
WHERE  a2.wartosc = 'Intel Socket 1156' AND a2.wartosc <> a.wartosc

Dokładnie o to chodziło. Był tylko mały błąd, ale już sobie poradziłem (INNER JOIN Towary t ON t.id_produktu=tp.id_produktu) Bardzo dziękuję za pomoc ;)

1

To cieszę się, że pomogłem. Przez nieuwagę wywaliłem swojego posta :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1