Dane z kilku tabel w jednym raporcie

Użytkowanie programu bazodanowego
fliper_katrill
Posty: 1
Rejestracja: śr lis 02, 2016 3:33 pm

Dane z kilku tabel w jednym raporcie

Post autor: fliper_katrill »

Witam serdecznie. Nie zakładam, że dalej będę prowadził swoją przygodę z Basem, oczekuję pomocy tylko w jednym zagadnieniu, zatem spójrzcie proszę na mnie łaskawym okiem. Pewnie rozwiązanie jest dla Was prozaiczne. Mam 15 tabel ze sprzętem. cpu, monitory, upsy itd. W każdej z nich jest to samo: ID, model, cena, nr i właściciel. Każda jest uzupełniona. Docelowo chciałbym móc odpowiedzieć na pytanie: Jaki sprzęt ma Kowalska? i w raporcie chciałbym aby Base znając właściciela z każdej grupy urządzeń wypisał ten sprzęt. Czy to trudne, jak się do tego zabrać? Jak napisałem pojedyncze tabele mam gotowe... Dziękuję z góry za pomoc :)
OpenOffice 4.1.1 Windows XP
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Dane z kilku tabel w jednym raporcie

Post autor: Jan_J »

#1

Do takich zastosowań zwykle służy SQL-owa operacja UNION, odpowiadająca obliczeniu sumy zbiorów. Problematyczne są dwie kwestie: implementacja standardu SQL we wbudowanej bazie HSQLDB oraz kontrola poprawności zapytania przeprowadzana w Base przy konstruowaniu kwerendy.

Czy Base obsłuży zapytanie postaci

Kod: Zaznacz cały

(SELECT blabla1 FROM t1) UNION (SELECT blabla2 FROM t2)
Szybki test wskazuje, że nie.

A to dlatego, że Base wymaga, by kwerenda była opisana operacją SELECT, a nie jako wynik działania algebry relacyjnej, jakim jest UNION. Zaakceptuje więc pytanie postaci

Kod: Zaznacz cały

SELECT * FROM ((SELECT blabla1 FROM t1) UNION (SELECT blabla2 FROM t2))
Szybki test wskazuje, że się tak da.

Wielokrotne gromadzenie wyników przez UNION, czyli

Kod: Zaznacz cały

(zapytanie) UNION (zapytanie) UNION (zapytanie) itd.
też jest dozwolone. Powtórzenia identycznych rekordów pojawią się na wyjściu tylko raz.

Warunkiem powodzenia operacji UNION jest formalna zgodność postaci tabel wynikowych. Wszystkie wewnętrzne SELECT-y winny generować tabele o takim samym układzie kolumn.

#2

Być może łatwiej byłby uzyskać odpowiedź na podstawie inaczej zaprojektowanej jednej tabeli sprzęt(id, user_id, kategoria_id, ...). Ale wtedy mogłyby wystąpić trudności w innych miejscach, np. w związku ze zróżnicowaniem parametrów opisujących poszczególne grupy sprzętu.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ