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`