Nie jestem przekonany, jaki efekt chcesz osiągnąć.
Czy przećwiczyć złączenie JOIN, czy wybrać dane? :)
Nie wiem także, na jakim motorze bazy danych pracujesz, ale jeżeli jest to MySQL, to zadziała takie coś
Kopiuj
SELECT
TableA.`indeks` AS klucz,
TableA.`ilosc`,
TableB.`kolor`
FROM TableA, TableB
WHERE TableA.`indeks` = TableB.`indeks` GROUP BY klucz
To też powinno zadziałać:
Kopiuj
SELECT
TableA.`indeks` AS klucz,
TableA.`ilosc`,
(SELECT TableB.`kolor` FROM TableB WHERE TableB.`indeks` = klucz GROUP BY `indeks`)
FROM TableA
oraz to również:
Kopiuj
SELECT
TableB.`indeks` AS klucz,
TableB.`kolor`,
(SELECT TableA.`ilosc` FROM TableA WHERE TableA.`indeks` = klucz )
FROM TableB GROUP BY klucz
Zwróć proszę uwagę na to, że klauzula GROUP BY po jakimś polu powoduje, że wybrane wartości są unikalne w tej kolumnie.
Teraz już dowolnie, czy najpierw wybierzesz dane z tabeli B i spowodujesz, że nie będą się dublowały wartości (dodając GROUP BY na indeks
, czy też wybierzesz w pierwszej kolejności dane z tabeli A i uzupełnisz je informacjami z tabeli B
Mała rada na przyszłość:
- Nie używaj polskich "ogonków" w nazwach tabel i kolumn (iloŚĆ),
- Nie używaj nazw "niebezpiecznych" ;-) w nazwach tabel i kolumn (np "index")
I jeszcze jedno, gdy tak patrzę na te tabele i ich zawartość.
Sądzę, że powinieneś połączyć je w jedną tabelę (kolumnaIndex, KolumnaKolor, KolumnaIlosc) i zadeklarować KolumneIndex jako klucz główny (PK) . Wydaje mi się, że wskazane byłoby także, by kolumna z kolorami była unikalna.
....Ale nie wiem do czego to stosujesz i jakie masz potrzeby, więc potraktuj to jako luźne propozycje ;-)
Oops! :(
Zauważyłem, że stoi znaczek "oracle" przy Twoim poście, więc mój wtręt "nie wiem, na jakiej bazie pracujesz" jest lekko nieaktualny ;-) ....ale sądzę, że moje zapytania na tym motorze też zadziałają.
Na marginesie, Twój przykład:
Kopiuj
SELECT A.indeks,a.ilosc,b.kolor FROM tabelaA
LEFT JOIN tabelaB ON a.indeks=b.indeks
zmodyfikowałbym:
Kopiuj
SELECT a.`indeks`, a.`ilosc`, b.`kolor` FROM tabelaA a
LEFT JOIN TabelaB b ON a.indeks = b.indeks
GROUP BY `indeks`
a jak się głębiej temu przyjrzysz, to zwrócisz uwagę, że na Twoje potrzeby (unikalności po kolumnie indeks
) nie ma znaczenia, czy wykonujesz złączenie lewostronne (LEFT) czy prawostronne (RIGHT).
Dla aktualnej zawartości tabel A i B, poniższy kod też powinien dać ten sam efekt, co we wcześniejszym przykładzie
Kopiuj
SELECT a.`indeks`, a.`ilosc`, b.`kolor` FROM tabelaA a
RIGHT JOIN TabelaB b ON a.indeks = b.indeks
GROUP BY `indeks`
.... i samo JOIN też chyba zaskoczy (... tak na 99,99% ;-))
Kopiuj
SELECT a.`indeks`, a.`ilosc`, b.`kolor` FROM tabelaA a
JOIN TabelaB b ON a.indeks = b.indeks
GROUP BY `indeks`
indeks
AS klucz, TableA.ilosc
,<br /> TableB.kolor
FROM TableA, TableB WHERE TableA.indeks
= TableB.indeks
GROUP BY klucz Złe grupowanie, gdyż? 2) SELECT TableA.indeks
AS klucz, TableA.ilosc
, (SELECT TableB.kolor
FROM TableB WHERE TableB.indeks
= klucz GROUP BYindeks
) FROM TableA A jakie to mogę się zdarzyć te wartości skoro Tabela A (tak wynika z prezentowanego przykładu) ma PK na kolumnie indeks? Podasz?<br /> 3) Pytania jak powyżej 4) Aliasy .... to chyba nie tylko w przykładzie 4-tym, ale we wszystkich.