» »

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
143028 (2663) GupeM
»

Java skeniranje map in podmap

Oddelek: Programiranje
61072 (961) nightrage
»

[SQL] Insert

Oddelek: Programiranje
251981 (1583) greentech
»

pgSQL problem z indexi...

Oddelek: Izdelava spletišč
71085 (995) Tito
»

SQL select problemček

Oddelek: Programiranje
71010 (880) darh

Več podobnih tem