Baza danych nie obsługuje relacji

Baza danych nie obsługuje relacji
Jan J
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad 2 lata
  • Postów:9
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ę:

Kopiuj
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

HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 13 godzin
  • Postów:1855
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

edytowany 1x, ostatnio: hipekk
Jan J
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad 2 lata
  • Postów:9
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.

HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 13 godzin
  • Postów:1855
1

Pokaż przerobione zapytanie.

HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 13 godzin
  • Postów:1855
0

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

HI
Sprawdziłem. Ten sposób działa.
Jan J
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad 2 lata
  • Postów:9
0

Próbowałem tego:

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

i tego:

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

i tego:

Kopiuj
SELECT Nazwa_statku FROM statki 
JOIN przybycia WHERE statki.Nr_IMO = przybycia.Nr_IMO
Jan J
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad 2 lata
  • Postów:9
0
hipekk napisał(a):

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

Kopiuj
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

HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 13 godzin
  • Postów:1855
0

Bez JOIN.
Warunek złączenia dajesz w WHERE

AR
  • Rejestracja:ponad 3 lata
  • Ostatnio:15 dni
  • Postów:38
0
Jan J napisał(a):

Próbowałem tego:

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

i tego:

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

i tego:

Kopiuj
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

Kopiuj
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...

edytowany 1x, ostatnio: areklipno
Jan J
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad 2 lata
  • Postów:9
0
hipekk napisał(a):

Bez JOIN.
Warunek złączenia dajesz w WHERE

Użyłem:

Kopiuj
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:

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

i tego:

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

i tego:

Kopiuj
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

Kopiuj
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

HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 13 godzin
  • Postów:1855
0

W której tabeli masz pole Nazwa_statku?

Najlepiej pokaż strukturę tych tabel.

HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 13 godzin
  • Postów:1855
0

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

Jan J
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad 2 lata
  • Postów:9
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

HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 13 godzin
  • Postów:1855
0

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

Jan J
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad 2 lata
  • Postów:9
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.

edytowany 1x, ostatnio: Jan J
HI
Pisałem o pliku bazy danych. W ten sposób nic to nie da.
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:około godziny
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


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
Jan J
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad 2 lata
  • Postów:9
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.

edytowany 1x, ostatnio: Jan J
HI
Ja testowałem to w LibreOffice Base (jak widać na screenach które wrzucałem - działa)
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:około godziny
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"


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
edytowany 2x, ostatnio: obscurity
HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 13 godzin
  • Postów:1855
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

C1
  • Rejestracja:około 5 lat
  • Ostatnio:4 minuty
  • Postów:37
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.

Jan J
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad 2 lata
  • Postów:9
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ć.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)