[MySQL] Ciekawe pytanie :)

0

Szukałem trochę w necie, ale nawet nie wiem jak to wpisać, żeby wyszukać odpowiedź na moje pytanie.

Przypuśćmy mam bazę danych "Boksu" lub czegokolwiek tam innego, w której z jednej tabeli, będę musiał przydzielić dwa razy ten sam klucz obcy (stworzyć relację) do drugiej.

Przykładowo :

  • Tabela z danymi zawodnika (idBoksera,imie,nazwisko,...)
  • Tabela z informacjami o walce (w niej dwa razy użyte będzie idBoksera,bo w jednym meczu bierze udział dwóch bokserów, dalsze informacje to data i inne, nie związane z moim pytaniem)

I teraz jak piszę zapytanie SELECT, to jak zrobić, żeby np. wyświetlić Imiona i nazwiska bokserów biorących udział w walce wraz z tymi dodatkowymi informacjami.
Nie wiem jak to rozwiązać, a robi się problem, ponieważ chcę jakby dwa razy odczytać te idBoksera i wyświetlić po nim dwa inne nazwiska. No nie mam pojęcia jak to zrobić, żeby dobrze wyświetlało. Nawet ciężko mi to opisać :D

Nie wiem czy dobrze wyjaśniłem o co mi dokładnie chodzi :)
Jeżeli coś jest niejasnego to proszę pytać . Z góry dziękuje za pomoc.

0

a dwa zapytania i UNION?
nie wiem czy do konca dobrze rozumiem intencje...

0

Chcę, żeby w jednej tabeli wybiło

Imię_1_Boksera , Nazwisko_1_Boksera , Imię_2_Boksera , Nazwisko_2_Boksera , .... (reszta nie ważna)

I jak teraz mając to Bokser_idBokser1, Bokser_idBokser2 (w tabeli Mecz_Bokserski), wybić te informację o Imieniu i Nazwisku (z tabeli Bokser, gdzie mam idBokser, Imie, Nazwisko ...)

Nie mam pojęcia do czego służy UNION, nie miałem tego jeszcze ,poczytam i zobaczę czy o to chodzi :)

0

to poczytaj o unionie:)

0

Ok zastosowałem UNION i dostałem coś takiego

Imię_Boksera , Naziwsko_Boksera , ... pozostałe informację.
Imię_2Boksera, Nazwisko_2Boksera, ... pozostałe informację.

Ładnie się scala, ale ja chcę mieć to wszystko w jednym wierszu, a nie w dwóch oddzielnych.

Imię_Boksera , Naziwsko_Boksera, Imię_2Boksera, Nazwisko_2Boksera ... pozostałe informację

0

Tak wiem, tyle że jak używam JOIN to wyświetla np. tylko imię_1_boksera i nazwisko_1_boksera.

2 boksera już nie chcę, bo pobiega z tabeli Bokser, te idBoksera tylko do wyświetlenia imienia i nazwiska tego pierwszego :)
2boksera, już nazywany jest tak samo i nic z tego nie wychodzi

Tak w skrócie to mam :

CREATE TABLE Bokser (
	idBokser INT IDENTITY(1,1) PRIMARY KEY,
	Imie VARCHAR(30) NOT NULL,
	Nazwisko VARCHAR(30) NOT NULL,
);

CREATE TABLE Mecz (
	idMecz INT IDENTITY(1,1) PRIMARY KEY,
	idBokser1 INT NOT NULL REFERENCES Bokser(idBoksera) ,
	idBokser2 INT NOT NULL REFERENCES Bokser(idBoksera)  ,
	Ring_idRing INT NOT NULL REFERENCES Ring(idRing) ON UPDATE CASCADE,
	Data_I_Godzina DATETIME NOT NULL,
);

Przykładowo w :

idBokser1 INT NOT NULL REFERENCES Bokser(idBoksera) ,
idBokser2 INT NOT NULL REFERENCES Bokser(idBoksera)  ,

Nie mogę użyć

ON UPDATE CASCADE

, wybija mi jakiś błąd.

A jak chcę zrobić zapytanie i używam Joinów , i jak zrobić coś takiego jak na dole, tylko żeby działało

SELECT b.Nazwisko AS 'Bokser1' , b.Nazwisko AS 'Bokser2' 
FROM Mecz m LEFT JOIN Bokser b
ON b.idBokser=m.idBokser1 AND b.idBokser=m.idBokser2

^^^ te ( ON b.idBokser=m.idBokser1 AND b.idBokser=m.idBokser2 ) już będzie źle, no nie wiem jak zrobić żeby z tego samego klucz na raz dwie informację wziąć.


W skrócie to tabela wygląda tak np.

idMecz | idBokser1 | idBokser2 | Ring_idRing | Data_I_Godzina

....1....|.......1........|.......2........|........1........|..19-08-2013.18:30..

A ma wyglądać tak

idMecz | Nazwisko1 | Nazwisko2 | Ring_idRing | Data_I_Godzina

....1....|.....Kowal...|....Nowak...|........1........|..19-08-2013.18:30..

z zamianą Ring_idRing sobie już sam poradzę.

1
SELECT b1.Nazwisko AS 'Bokser1' , b2.Nazwisko AS 'Bokser2' 
FROM Mecz m 
  LEFT JOIN Bokser b1 ON b1.idBokser=m.idBokser1 
  LEFT JOIN Bokser b2 ON b2.idBokser=m.idBokser2 
0

Dzięki wielkie. Dokładnie o to mi chodziło :) Teraz otworzyłeś dla mnie wielka nową księgę zapytań :D

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