Baza danych nie obsługuje relacji

0

Witam,
Powtarzałem sobie materiał do matury z informatyki.
Do stworzenia bazy danych użyłem plików z: https://arkusze.pl/matura-informatyka-2023-przykladowy-arkusz-cke-poziom-rozszerzony/
Próbowałem uruchomić kwerendę:

SELECT Nazwa_statku FROM statki 
JOIN przybycia ON statki.Nr_IMO = przybycia.Nr_IMO
WHERE przybycia.Bandera IS 'NO'

Jednak otrzymałem błąd pokazany w załączniku.
Używam programu LibreOffice Base w wersji 7.4
Przez ponad godzinę próbowałem samodzielnie naprawić błąd, lecz nie udało mi się.
Proszę o pomoc, nie wiem co robię źle, ale wiem, że gdy używam tylko jednej tabeli na raz to wszystko dobrze działa.

error.png

1

Może warunek złączenia trzeba dać w WHERE

Update:
Zapędziłem się.
Miałem na myśli wstawienie nazw wszystkich tabel w FROM a warunki złączeń do WHERE

0
hipekk napisał(a):

Może warunek złączenia trzeba dać w WHERE

Otrzymałem komunikat o błędzie składniowym, więc niestety nie to i wszystkie poradniki do SQL twierdzą, że to powinno być JOIN i ON.

1

Pokaż przerobione zapytanie.

0

Spróbuj FROM nazwy tabel po przecinku, a warunek złączenia w WHERE.

0

Próbowałem tego:

SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO
AND przybycia.Bandera IS 'NO'

i tego:

SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO
WHERE przybycia.Bandera IS 'NO'

i tego:

SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO
0
hipekk napisał(a):

Spróbuj FROM nazwy tabel po przecinku, a warunek złączenia w WHERE.

SELECT Nazwa_statku FROM statki, przybycia 
JOIN przybycia ON statki.Nr_IMO = przybycia.Nr_IMO
WHERE przybycia.Bandera IS 'NO'

To daje ten sam błąd co załączyłem na początku

0

Bez JOIN.
Warunek złączenia dajesz w WHERE

0
Jan J napisał(a):

Próbowałem tego:

SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO
AND przybycia.Bandera IS 'NO'

i tego:

SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO
WHERE przybycia.Bandera IS 'NO'

i tego:

SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO

Nie wiem czy da się tak w tej wersji sqla, ale spróbowałbym jeszcze

SELECT Nazwa_statku FROM statki where exists (select Nr_IMO from przybycia where statki.Nr_IMO = przybycia.Nr_IMO and przybycia.Bandera IS 'NO' )

*edytowałem bo banderę umieściłem nie tam gdzie trzeba...

0
hipekk napisał(a):

Bez JOIN.
Warunek złączenia dajesz w WHERE

Użyłem:

SELECT Nazwa_statku FROM statki, przybycia 
WHERE statki.Nr_IMO = przybycia.Nr_IMO

i dostałem ten sam błąd co na początku, czyli, że nie może wykonać kwerendy, bo składa się z więcej niż jednej tabeli

areklipno napisał(a):
Jan J napisał(a):

Próbowałem tego:

SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO
AND przybycia.Bandera IS 'NO'

i tego:

SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO
WHERE przybycia.Bandera IS 'NO'

i tego:

SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO

Nie wiem czy da się tak w tej wersji sqla, ale spróbowałbym jeszcze

SELECT Nazwa_statku FROM statki where exists (select Nr_IMO from przybycia where statki.Nr_IMO = przybycia.Nr_IMO and przybycia.Bandera IS 'NO' )

*edytowałem bo banderę umieściłem nie tam gdzie trzeba...

Dostałem błąd:error.png

0

W której tabeli masz pole Nazwa_statku?

Najlepiej pokaż strukturę tych tabel.

0

Jak to mówią: u mnie działa :)
screenshot-20220916215141.png

0
hipekk napisał(a):

W której tabeli masz pole Nazwa_statku?

Najlepiej pokaż strukturę tych tabel.

Tabele zostały utworzone z plików z załączników z przykładowej matury z informatyki: https://arkusze.pl/matura-informatyka-2023-przykladowy-arkusz-cke-poziom-rozszerzony/
Statki:
statki.png statki.png
Przybycia:przybycia.png przybycia.png

0

Wrzuć może plik bazy - sprawdzę u siebie.

0

Tu są pliki z danymi. Dane są oddzielone średnikami. Zaimportowałem je standardowo.
przybycia.txt
statki.txt

*Edit: Tu jest całość z czego korzystam: db.zip

hipekk napisał(a):

Wrzuć może plik bazy - sprawdzę u siebie.

1

Używasz zapytań do plików tekstowych. Z tego co czytam libreoffice ma ograniczenie i potrafi tylko działać na jednym pliku tekstowym w tym samym czasie (nie wiem czemu).
Zaimportuj to do prawdziwej bazy danych

0
obscurity napisał(a):

Używasz zapytań do plików tekstowych. Z tego co czytam libreoffice ma ograniczenie i potrafi tylko działać na jednym pliku tekstowym w tym samym czasie (nie wiem czemu).
Zaimportuj to do prawdziwej bazy danych

Czy OpenOffice, lub Apache OpenOffice nadadzą się?
Na maturze z informatyki mam do wyboru tylko OpenOffice, Apache OpenOffice i LibreOffice, więc muszę wybrać coś z tego.

2

może być libreoffice, ale masz połączenie do plików tekstowych. Musisz zaimportować dane do bazy. Nie znam się na libreoffice - nie wiem nawet jak to zrobiłeś, ale widzę że plik bazy danych jest połączony z plikami (nie da się ich usunąć, "typ bazy danych" to "Tekst") i widzę w google że libreoffice potrafi robić zapytania tylko do jednego pliku.

Wejdź w "Tabele" -> "Baza danych" -> "Typ połączenia" i wybierz np "plik Firebird"

1

Coś jest na rzeczy.

Ja w swoim pliku na dole na pasku mam:
screenshot-20220916224326.png

A otwierając Twój:
screenshot-20220916224355.png

0

A może użyjesz jakiejś normalnej bazy danych np. Postgresa zamiast egzotycznych rozwiązań? Chyba, że matura na tobie wymusza akurat bazę danych z pakietu office. Już chyba nawet H2 byłoby lepszym wyborem.

1
chomik123 napisał(a):

A może użyjesz jakiejś normalnej bazy danych np. Postgresa zamiast egzotycznych rozwiązań? Chyba, że matura na tobie wymusza akurat bazę danych z pakietu office. Już chyba nawet H2 byłoby lepszym wyborem.

Matura wymusza, ale udało mmi się naprawić poprzez zmodyfikowanie plików (zmiana rozszerzenia na CSV i otworzenie ich w LibreOffice Calc) i kopiowanie danych do bazy danych i nie wiem jak, ale zaczęło działać.

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