relacyjna baza danych/join?

0

Witam! Posiadam 3 tabele:

String createCzytelnik = "CREATE TABLE IF NOT EXISTS czytelnicy(id_czytelnika INTEGER PRIMARY KEY AUTOINCREMENT, imie VARCHAR(20), nazwisko VARCHAR(20), login VARCHAR(10) UNIQUE)";
		String createKsiazka = "CREATE TABLE IF NOT EXISTS ksiazki(id_ksiazki INTEGER PRIMARY KEY AUTOINCREMENT, tytul VARCHAR(20), autor VARCHAR(20), czyJest BOOLEAN)";
		String createWypozyczenie = "CREATE TABLE IF NOT EXISTS wypozyczenia(id_wypozycz INTEGER PRIMARY KEY AUTOINCREMENT, id_czytelnika, id_ksiazki)";

jak mogę wyświetlić w metodzie Wypozyczenia() resulty w postaci np : Adam Nowak - Harry Potter i Czara Ognia , J.K.Rowling (?)
Ktoś mi napisał coś takiego:

SELECT czytelnicy.imie, czytelnicy.nazwisko from czytelnicy left outer join wypozyczenia on czytelnicy.id_czytelnika = wypozyczenia.id_czytelnika left outer join ksiazki on wypozyczenia.id_ksiazki = ksiazki.id_ksiazki;

ale coś nie za bardzo to działa a poza tym (mimo wizyt na różnych stronach ) nie mam pojęcia jak zrobić to na 3 tabelach i to gdzie w jednej są odnośniki do pozostałych.. Można to jakoś zrobić tym łączeniem tabel? Jak nie to pomoże mi ktoś na jakimkolwiek przykładzie jak stworzyć taką relacyjną bazę gdzie właśnie to id będzie łączone z id z innej tabeli? I czy można wyświetlić potem zamiast tych id to imie , nazwisko, tytul, autor?
Proszę o pomoc bo z samych stron nie daje rady zrozumiec tego o wiele prosciej czasem jakis uzytkownik potrafi cos wyjasnic ;) pomozecie?

0

Abstrahująć od tego, że CREATY masz złe, że nie wiadomo, co to za baza danych (nie udało mi się rozszyfrować), to SELECTa masz prawie prawidłowego. Wywal OUTER i dodaj brakjujące pola po SELECT i będzie OK.

0

Czemu creaty mam złe? Normalnie wszystkie operacje wypozyczania i oddawania ksiazek itp mam zrobione tylko nie wiem jak zrobic relacje miedzy nimy/polaczyc je.
Wywalic outer tzn zamiast napisac "czytelnicy left outer join wypozyczenia" to mam zrobic "czytelnicy left join wypozyczenia"
No i nie wiem tez jakich pol brakuje. Wpisuje to co chce wyswietlic tak? Czyli imie, nazwisko, tytul, autor?

0

@Patryk27: Wiem ze to są dwie różne sprawy dlatego napisałem:

Można to jakoś zrobić tym łączeniem tabel? Jak nie to pomoże mi ktoś na jakimkolwiek przykładzie jak stworzyć taką relacyjną bazę gdzie właśnie to id będzie łączone z id z innej tabeli?

0
Adrian Paź napisał(a):

Czemu creaty mam złe? Normalnie wszystkie operacje wypozyczania i oddawania ksiazek itp mam zrobione tylko nie wiem jak zrobic relacje miedzy nimy/polaczyc je.
Wywalic outer tzn zamiast napisac "czytelnicy left outer join wypozyczenia" to mam zrobic "czytelnicy left join wypozyczenia"
No i nie wiem tez jakich pol brakuje. Wpisuje to co chce wyswietlic tak? Czyli imie, nazwisko, tytul, autor?

Nadal nie wiem, jaka baza danych, ale powinno zadziałać czytelnicy LEFT JOIN wypozyczenia. OUTER zazwyczaj nie jest obowiązkowe.
Tak masz wypisać te pola, które chcesz,a których ci brakuje: ksiazka.autor, ksiazka.tytul
Byłoby ci też znacznie łatwiej, gdybyś zastosował aliasy.

0

Dobra mam coś takiego:

ResultSet resultSet = statement
					.executeQuery("SELECT czytelnicy.imie, czytelnicy.nazwisko, ksiazki.tytul, ksiazki.autor"
							+ " FROM  czytelnicy left join wypozyczenia "
							+ "on czytelnicy.id_czytelnika = wypozyczenia.id_czytelnika left join wypozyczenia on ksiazki.id_ksiazki = wypozyczenia.id_ksiazki");

ale nie wiem czemu wyrzuca mi błąd :( "[SQLITE_ERROR] SQL error or missing database (no such column: ksiazki.tytul)"
przecież mam podane ze kolumna "tytul" jest z tabeli "ksiazki" :/

0

W SELECT masz dwa razy wpozyczenia, a ani razu nie masz joina do tabeli książki. Naucz się formatować kod i korzystać z aliasów np.

SELECT *
FROM czytelnicy AS c
LEFT JOIN wypozyczenia AS w on
    w.id_czytelnika = c.id_czytelnika
LEFT JOIN ksiazki AS k ON 
    w.id_ksiazki = k.id_ksiazki;

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