Prośba o pomoc z utworzeniem zapytania.

0

Jako, że jest to mój pierwszy post na tym forum, witam wszystkich Użytkowników.

Nie będę ukrywał dopiero uczę się tworzyć zapytania i napotkałem problem, którego nie potrafię rozwiązać.
Poniżej przedstawiam to z czym nie mogę sobie poradzić. Mam 2 tabele a mianowicie:

1 tabela
id imie nazwisko
1 jas kowalski
2 jacek nowak

2 tabela
id kolor
1 czarny
1 bialy
2 zielony

Jak napisać selecta żeby otrzymać poniższy wynik, każde pole w osobnej kolumnie?

id imie nazwisko kolor1 kolor2
1 jas kowalski czarny bialy
2 jacek nowak zielony NULL

Być może dla Was będzie to banalnie proste, jednak jak jako samouk nie potrafię sobie z tym poradzić. Proszę o pomoc.

0

Potrzebujesz joinów.

Tutaj są wytłumaczone https://4programmers.net/Forum/1301974
Tutaj masz przykład https://www.w3schools.com/sql/sql_join.asp
Tutaj masz wizualizacje:
title
title

0

W "1 tabela" powinieneś mieć klucz obcy z "2 tabela".
Np.
1 tabela
id imie nazwisko id_koloru

I wtedy
select (kolumny)
from 1tabela t1
left join 2tablea t2 on t1.id_koloru = t2.id

0

Dziękuje za podpowiedzi.
Z JOIN'ami już trochę walczyłem i wydaje mi się że je zrozumiałem, przynajmniej podstawy.

Jeśli chodzi o id w moim przykładzie i tabele to jest wszystko tak jak do mojego zadania być powinno.
Id służy do przypisania koloru do osoby.

Pisząc takiego selecta
select t1.Id t1.Imie t1.Nazwisko t2.kolor
from 1tabela t1
left join 2tabela t2
ON t1.Id = t2.Id

Dostaję wynik
1 jas kowalski czarny
1 jas kowalski bialy
2 jacek nowak zielony

Chodzi mi o to, że chcę te kolory wyświetlić w 1 wierszu, tak jak napisałem w pierwszym poście.

id imie nazwisko kolor1 kolor2
1 jas kowalski czarny bialy
2 jacek nowak zielony NULL

0

Trzeba skorzystać z funkcji agregujących i concatowania Stringów(tzn varcharów). Więcej nie podpowiem na razie poszukaj sam :)

1

Najprościej? Do wyniku twojego zapytania dołącz LEFT JOINem jeszcze raz tabelą z kolorami. Czyli:

SELECT x.*, t.kolor as kolor2 FROM (
select t1.Id t1.Imie t1.Nazwisko t2.kolor
from 1tabela t1
left join 2tabela t2
ON t1.Id = t2.Id)
x LEFT JOIN 2tabela t ON x.id=t.id
1

Myślę, ze chcesz zrobić pivota tabeli kolor do postaci

id kolor1, kolor1
1, czarny, bialy
2, zielony, null

i taką postać połączyć z 1 tabelą, jako że nie sprecyzowałes o jaki silnik bazy chodzi to cieżko pomóc dalej

0

Marcin.Miga dziękuję za podpowiedź. Dokładnie o takie proste rozwiązanie mi chodziło.

Panczo kombinuje na starym Sybase. Z pivotem szukałem rozwiązania, ale to już chyba wyższa szkoła.

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