Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Użytkowanie programu bazodanowego
nowicjusz
Posty: 17
Rejestracja: ndz sty 19, 2014 12:51 am

Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: nowicjusz »

Potrzebuję wykonać kwerendę która połączy kilka tabel o różnych długościach wierszy i tej samej ilości kolumn ( w każdej 3 kolumny )

SELECT "Tabela1"."1","Tabela1"."2","Tabela2"."1","Tabela2"."3"","Tabela3"."3""

FROM "Tabela1"
LEFT JOIN "Tabela2" on "Tabela1"."1" = "Tabela2"."1" and "Tabela1"."2" = "Tabela2"."2"
LEFT JOIN "Tabela3" on "Tabela1"."1" = "Tabela3"."1" and "Tabela1"."2" = "Tabela3"."2"

do tego chciałbym połączyć np : Tabela6 z Tabela 2 - i nie wiem jak to zrobić

Tzn chodzi mi o dodatnie Klauzuli FROM

Potrafię połączyć pierwszą tabelę z drugą i trzecią i kolejną ale jakbym chciał do tego połączenia dodać jeszcze relacje między tabelą np 7 i 8 to już nie wiem jak .
OpenOffice.ux.pl.3.4 na Windows XP
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: Jan_J »

FROM jest tylko jedno:
SELECT <jakie kolumny> FROM <skąd> WHERE <jakie wiersze>
JOIN jest wchodzi w skład opisu struktury <skąd>.

Do tego co masz dopisujesz ... JOIN nazwa_tabeli ON warunek_zgodności_wierszy
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
nowicjusz
Posty: 17
Rejestracja: ndz sty 19, 2014 12:51 am

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: nowicjusz »

Dziękuję - działa
OpenOffice.ux.pl.3.4 na Windows XP
nowicjusz
Posty: 17
Rejestracja: ndz sty 19, 2014 12:51 am

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: nowicjusz »

Dwie tabele T1 i T2 w każdej identyczna długość wierszy i w każdej po 3 kolumny
T1 zbiór liczb od 1 do 8 T2 zbiór liczb od 1 do 40

Jak wyciągnąć z tabeli T2 liczby z tych komórek z Tabeli T1 gdzie są wartości np 1 8 5 i 2 4 9

SELECT "T2"."1" , "T2"."2" , "T2"."3"
FROM "T1" WHERE "1" = 1 and "2" = 8 and "3" = 5 ; - nie działa bo odnosi się do pierwszej tabeli

SELECT "T2"."1" , "T2"."2" , "T2"."3"
FROM "T1"
JOIN "T2" on "T1"."1"= ?????????????

dwie kolumny o dwóch różnych zbiorach liczb nie chodzi mi o porównanie liczby 1 z tabeli 1 i liczby 1 z tabeli 2 tylko wyszukanie liczby 1 z tabeli 1 i podanie
wartości z tej samej komórki w tabeli 2 .
OpenOffice.ux.pl.3.4 na Windows XP
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: Jan_J »

nowicjusz pisze:Jak wyciągnąć z tabeli T2 liczby z tych komórek z Tabeli T1 gdzie są wartości np 1 8 5 i 2 4 9
SELECT .... FROM T1 JOIN T2 ON ?????
musisz umieć wyrazić warunek połączenia rekordów w postaci wyrażenia logicznego używającego nazw pól tabel T1, T2 i w razie potrzeby wartości stałych.
Stwierdzenie "gdzie są wartości np 1 8 5 i 2 4 9" jest przykładem, a przykłady są na ogół za mało precyzyjne

.... ON (T1.1, T1.2, T1.3) = (1, 8, 5) AND (T2.1, T2.2, T2.3) = (2, 4, 9)

Można też formułować tzw pełne złączenie za pomocą składni
SELECT .... FROM T1, T2 WHERE ...
w której nie ma warunku złączenia, tak jakby był on zawsze spełniony, a o wyborze rekordów decyduje filtr. Ta wersja wymaga dobrego optymalizatora zapytań w systemie, w przeciwnym razie bywa bardzo nieefektywna.

SELECT .... FROM T1, T2 WHERE (T1.1, T1.2, T1.3) = (1, 8, 5) AND (T2.1, T2.2, T2.3) = (2, 4, 9)

PS. Jak znam Base'a, wszystkie nazwy obiektów trzeba ująć w cudzysłowy podwójne.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
nowicjusz
Posty: 17
Rejestracja: ndz sty 19, 2014 12:51 am

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: nowicjusz »

ostatnią wiadomość od Ciebie tzn informacje w niej zawarte przetestuję ; poprzednie informacje w końcu pojąłem i poradziłem sobie z zadaniem na takiej zasadzie :

Problem stanowi jednak dublowanie wierszy i tu moje kolejne pytanie :

Czy do takiej formy kodu SQL jaki przedstawiłem ( bo taka forma jest zadowalająca jak na moją małą wiedzę ) ; istnieje możliwość dodania klauzuli lub jakiejś funkcji np UNION tak aby wynik kwerendy ograniczyć do unikalnych wartości tzn aby wiersze nie dublowały się tzn aby nie było takich samych wierszy ??

Dziękuję za informacje i tak jak pisałem tę ostatnią odpowiedz przeanalizuję i postaram się nauczyć tak jak poprzednie
Ostatnio zmieniony wt lut 04, 2014 11:36 pm przez nowicjusz, łącznie zmieniany 1 raz.
OpenOffice.ux.pl.3.4 na Windows XP
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: Jan_J »

Można: SELECT DISTINCT (lista pól) FROM ...
Ale czy naprawdę nie da się uprościć kryterium łączenia?
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
nowicjusz
Posty: 17
Rejestracja: ndz sty 19, 2014 12:51 am

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: nowicjusz »

Naprawdę nie potrafię odpowiedzieć na to pytanie : jak dobrać kryteria wyboru.
W wierszu pierwszym są numery tabel w drugim numery kolumn w trzecim wierszu ustawiłem liczby które mnie interesują i oznaczyłem kolorami ... te liczby występują w różnych wierszach a na potrzeby zobrazowania problemu ustawiłem je w wierszu nr 3 .
W komórkach A19:H19 jest ciąg liczb który muszę uzyskać z tych wszystkich tabel ustalając pewne kryteria .

Najlepiej aby w jednym wierszu zalazło się te 8 liczb .
Wydaje mi się że założyłem wszystkie możliwości połączenia tabel aby uzyskać ten zbiór .

Planowałem wybrać wszystkie kolumny ze wszystkich tabel i połączyć je ze sobą lecz uzyskiwałem nie dość że zdublowane wiersze to też zdublowane kolumny.
Tak swoimi słowami postaram się opisać na tym przykładzie :

Najlepiej by było połączyć liczby na wszystkie możliwe sposoby i uważałem że czym bardziej skomplikowane założenia i więcej warunków do spełnienia to będzie korzystniejszy wynik tzn znajdę kilka wierszy o poszukiwanych przeze mnie wartościach eliminując przy tym wszystkie możliwe kombinacje a okazuje się że sprawa wygląda odwrotnie . Im więcej warunków tym więcej wierszy i to powtarzających się :(
Ostatnio zmieniony wt lut 04, 2014 11:37 pm przez nowicjusz, łącznie zmieniany 1 raz.
OpenOffice.ux.pl.3.4 na Windows XP
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: Jan_J »

Jeśli się nie machnąłem przy czytaniu

select distinct
777.1, 717.2, 717.3, 777.4, 854.1, 154.2, 156.3, 154.3
from 154
join 156 on (154.1, 154.2) = (156.1, 156.2)
join 164 on (154.1, 154.3, 156.3) = (164.1, 164.3, 164.2)
join 174 on (154.1, 154.3) = (174.1, 174.3)
join 777 on 174.3 = 777.3
join 717 on (777.1, 777.2) = (717.1, 717.3)
join 854 on (154.2, 154.3) = (854.2, 854.3)

albo

select distinct
777.1, 717.2, 717.3, 777.4, 854.1, 154.2, 156.3, 154.3
from 154, 156, 164, 174, 777, 717, 854
where
(154.1, 154.2) = (156.1, 156.2) and
(154.1, 154.3, 156.3) = (164.1, 164.3, 164.2) and
(154.1, 154.3) = (174.1, 174.3) and
174.3 = 777.3 and
(777.1, 777.2) = (717.1, 717.3) and
(154.2, 154.3) = (854.2, 854.3)

chyba że z jakichś tam powodów wiadomo, że np. jeżeli któreś dwa pola się zgadzają, to trzecie też musi. Ale to zależy od sensu tych danych.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
nowicjusz
Posty: 17
Rejestracja: ndz sty 19, 2014 12:51 am

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: nowicjusz »

nie działają u mnie nawiasy , kopiuj wklej nic nie da chociażby z tego względu że nie ma kolumny 4 tzn 777.4 ale to akurat drobiazg.
Ogólnie kwerenda wybiera właściwie i distinct działa poprawnie .
Popróbuję jeszcze z nawiasami wtedy może będzie mniejsza ilość wierszy .

aha byłbym zapomniał odpowiedzieć na pytanie - to co musi się zgadzać to akurat z tych wartości w tabelach wynik ( te 8 liczb )

Chyba będę potrzebował jakieś dodatkowe kryterium wyboru bo jeżeli wyników jest wiele to znaczy że mimo dobrych założeń są inne liczby występujące w tej tabeli które na takiej samej zasadzie tworzą mi ciąg 8 liczb lecz złożony z zupełnie innych liczb .

Uważam że wybrałem wszystkie możliwości a to że wyników jest wiele to znaczy że wiele różnych liczb występuje w tych samych kolumnach i potem na tej samej zasadzie w innych co powoduje zbyt dużo wyników i na tej zasadzie nie wyciągnę tylko tego jednego zbioru .

Chyba wszystko działa poprawnie .

zrobię test na tych tabelach gdzie wynik będzie tylko jeden tzn będzie mógł być tylko jeden oczekiwany wynik ; pozostałe liczby dobiorę tak aby nie występowały wspólnie z innymi po to aby sprawdzić jak wyświetlany jest w kwerendzie poszukiwany przezemnie ciąg .

Ogólnie pomoc się przydała i jak na moje kilkudniowe doświadczenie z Base jestem zadowolony z rezultatów za co dziękuje .

( można zapisać kwerendę w notatniku lub arkuszu kalkulacyjnym ? )
OpenOffice.ux.pl.3.4 na Windows XP
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: Jan_J »

nowicjusz pisze:Chyba będę potrzebował jakieś dodatkowe kryterium wyboru bo jeżeli wyników jest wiele to znaczy że mimo dobrych założeń są inne liczby występujące w tej tabeli które na takiej samej zasadzie tworzą mi ciąg 8 liczb lecz złożony z zupełnie innych liczb .
Tak sądziłem, że kryteria są dobierane doraźnie. Warto je głębiej przemyśleć.
( można zapisać kwerendę w notatniku lub arkuszu kalkulacyjnym ? )
Można. Ale można też zapisać w pliku odb zarejestrowanym jako źródło danych, i wyzwalać odpowiedzi w arkuszu, poprzez Źródła Danych (F4).
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
nowicjusz
Posty: 17
Rejestracja: ndz sty 19, 2014 12:51 am

Re: Łączenie wielu tabel ( jak wielokrotnie użyć FROM )

Post autor: nowicjusz »

Nie sądziłem że to takie poste - mogłem się domyślić że jeśli można przeciągnąć z arkusza rekordy do Tabeli to można też w drugą stronę z tabeli lub kwerendy do arkusza :)

Temat z łączeniem tabel kończę do czasu kolejnego zapytania .
OpenOffice.ux.pl.3.4 na Windows XP
ODPOWIEDZ