» »

Dinamični query oz. join removal

Dinamični query oz. join removal

hendriks ::

Na stackoverlow-u pravijo da je težko, kako bi se vi lotili tega?

Recimo da imamo naslednjo funkcijo

string ConstructQuery(string inputQuery, string[] mandatoryTables, string[] userFields)


-inputQuery: sql query, ki vsebuje polja, tabele, joine in where pogoje
-mandatoryTables: seznam obveznih tabel
-userFields: seznam polj, ki jih uporabnik izbere iz poljubne aplikacije

inputQuery je sestavljen npr. takole:

SELECT
    Table1.SomeFieldA,
    Table2.SomeFieldB,
    Table2.SomeFieldC,
    Table3.SomeFieldD
FROM   Table1
JOIN   Table2 ON Table1.Code = Table2.Code
JOIN   Table3 ON Table2.Code = Table3.Code
WHERE  Table1.SomeConditionField = "xyz"


userFields: SomeFieldB, SomeFieldC
mandatoryTables: Table1

Pričakovani query je:

SELECT
    Table2.SomeFieldB,
    Table2.SomeFieldC
FROM   Table1
JOIN   Table2 ON Table1.Code = Table2.Code
WHERE  Table1.SomeConditionField = "xyz"


Torej, kako bi se lotili tega? Binarna drevesa? Je kdo že delal kaj takega?

Hvala in lep pozdrav :)

joze67 ::

Tabele zmečeš v drevo - dve vozlišči sta povezani, če nastopata v join stavku. Označiš obvezne in uporabljene tabele. Poiščeš najmanjše drevo, ki vsebuje vse označene tabele (npr. mečeš neoznačene liste enega za enim ven). Potem narediš DFS od nekega obveznega vozlišča in vsakič izpišeš pogoj JOIN.

Seveda ob predpostavki, da začetni pogoji inducirajo eno drevo, in ne mogoče gozda. Pa da če je več obveznih tabel, da je vseeno, iz katere greš.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

sql join stavki in group by

Oddelek: Programiranje
143354 (2989) GupeM
»

Java skeniranje map in podmap

Oddelek: Programiranje
61148 (1037) nightrage
»

[SQL] Insert

Oddelek: Programiranje
252074 (1676) greentech
»

pgSQL problem z indexi...

Oddelek: Izdelava spletišč
71157 (1067) Tito
»

SQL select problemček

Oddelek: Programiranje
71074 (944) darh

Več podobnih tem