sql Problem
Greiff
Gesendet: 04.07.21 18:22
Betreff: RE: sql Problem, keine Lösung mit msaccess


Veteran

Beiträge: 229
10010025
Ort: Badendorf
Hallo, das ist ja ein nettes Angebot
ich habe es rekursiv mit sqlite gemacht
gesucht sind alle erlaubten Kombinationen
Mein Beispiel habe ich auf 3 Inputkanäle begrenzt (es könnten aber auch 20 sein)
alle 3 Inputs sind in der CTE "allowed" aufgelistet zusammen mit den erlaubten Outputs
"alternatives" ist die sich ergebende Ergebnistabelle, die ich anschließend mit dem select filtere.
Ich habe es inzwischen etwas anders als vorher dargestellt: jede Zeile ist eine mögliche Lösung
die Striche und Pfeile dienen nur der Lesbarkeit, müssen also nicht sein

Hier der Output/ die 3 Lösungen, die sich ergeben und so ausgegeben werden:

Lösung
------------------------------------------------------
Input1 => b1 || Input2 => b3 || Input3 => b4 ||
Input1 => b2 || Input2 => b3 || Input3 => b4 ||
Input1 => b2 || Input2 => b1 || Input3 => b4 ||

erlaubte Lösungen sind also b1,b3,b4 oder b2,b3,b4 oder b2,b1,b4
hier der Code, der das o.a. Ergebnis erzeugt
Ich drücke die Daumen, dass Du eine Lösung mit msaccess hinbekommst.
und hoffe, dass ich nur ein Brett vor dem Kopf habe
Ich bin sehr gespannt

viele Grüße, Rudolf

--------------------------------------------------------------------
with recursive
allowed(Input,erlaubt) as
(
values('Input1','b1')
union all values('Input1','b2')
union all values('Input2','b3')
union all values('Input2','b1')
union all values('Input3','b4')
),
alternatives (nr,Lösung) as
(
select 1, Input || ' => ' ||erlaubt || ' || '
from allowed
where Input in
(select distinct Input from allowed limit 1) /*Startzeile*/
union ALL
select nr+1, Lösung || Input || ' => ' ||erlaubt || ' || ' as q
from allowed,alternatives /*Rekursivzeile*/
where Input in
(select distinct Input from allowed
where instr(Lösung,Input)=0
limit 1)
and instr(Lösung,erlaubt)=0 /*keine doppelten Erlaubten => nicht schon in Lösung enthalten*/
and q not null /*Endkriterium, Input wird NULL nach dem letzten Input*/
)
select Lösung from alternatives where nr in (select max(nr) from alternatives) /*nur komplette Lösungen anzeigen*/

Edited by Greiff 04.07.21 16:26
Top of the page Bottom of the page