TABEL2 kol3 kol4 path ------------------------ a1 t1 NULL a2 t3 NULL a3 t3 NULL a4 t2 NULL a5 t3 NULL
path skal nu opdateres. Opdateringen sker ved at jeg kommer med en kol1 og en kol4 vaerdi (og en vaerdi for path). Det kunne f.eks vaere t2, n3 (og "c:\").
Nu er det saa meningen at disse raekker(som jeg selekterer i select saetningen) skal opdateres saaledes at path bliver sat til "c:\":
select * from TABEL1, TABEL2 where kol4='n3' and kol3=kol2 and kol1='n3'
Det viser sig imidlertidigt nu at de resultater(isaer kol2) jeg faar ud af dette udtraek, er:
kol2 ---- a2 a3
Kigger man lidt paa kol2, saa gaar a2 igen for n1 of a3 gaar igen for n2. n1 har ogsaa a1 og n2 har ogsaa a4, saa disse skal OGSAA have path opdateret.
Dette er et lille eksempel, men det kan hurtig eskalere(hvis nu a1 gik igen i en helt 3. kol1). Kan man paa en eller anden smart maade lave en sej SQL saetning der driver ALLE kol3 ud som skal opdateres til den samme path?
ja, det er nemlig det der er problemet... Det viser sig til at starte med at det er dem hvor kol1=n3 og kol4=t3(jeg kom til at skrive t2 foer, men det er t3). Dvs.
1) n3 a2 a2 t3 NULL 2) n3 a3 a3 t3 NULL
Her ses det at kol2=a2 og a3. Dvs. de skal opdateres i TABEL2. Men der er ogsaa andre raekker hvor kol2=a2 eller kol2=a3:
3) n1 a2 a2 t3 NULL 4) n2 a3 a3 t3 NULL
Dvs. at jeg nu faar nye soegeord(foerst var det t3,n3. Nu er det henholdsvis n1, t3 og n2, t3). Nu er det ikke tilfaeldet, men HVIS der ogsaa havde vaeret en raekke: 5) n2 a4 a4 t3 NULL
saa skulle denne ogsaa opdateres! Det skyldes at 4) har samme kol1 og kol4 som 5). Det medfoerer at vi nu istedet for a2 og a3 har a2, a3 og a4. Dette kan blive ved med at eskalere, men paa et tidspunkt vil der ikke vaere flere. Ogsaa er jeg faerdig! Men jeg ville bare tro at dette cirkel raes kunne hentes via een SQL saetning.
Jeg har saadanne set loest det med SQL saetninger, men jeg er ikke tilfreds med resultatet. Jeg poster dem lige, saa kan det vaere at det er nemmere at forstaa problemet:
SELECT distinct kol2 FROM TABLE1, TABLE2 WHERE kol2=kol3 and kol4='cajlog-tx0' and kol1 in ( SELECT DISTINCT kol1 FROM TABLE1, TABLE2 WHERE kol2=kol3 and kol4='cajlog-tx0' and kol2 in ( SELECT kol2 FROM TABLE1, TABLE2 WHERE kol2=kol3 and kol1='FO150' and kol4='cajlog-tx0' ) )
Her vil jeg nu faa et antal kol2 vaerdier ud. Jeg proever nu paa dette resultat at goere:
SELECT distinct kol2 FROM TABLE1, TABLE2 WHERE kol2=kol3 and kol4='cajlog-tx0' and kol1 in ( SELECT DISTINCT kol1 FROM TABLE1, TABLE2 WHERE kol2=kol3 and kol4='cajlog-tx0' and kol2 in ( TIDLIGERE RESULTAT ) )
Faar jeg de samme vaerdier ud, saa er jeg faerdig... faar jeg flere, saa skal jeg proeve endnu engang.... indtil jeg faar samme antal ud som forrige udtraek
IMHO tror jeg, at du får svært ved at løse det i ren SQL.
Hvad siger din datamodel omkring sammenhæng mellem de to tabeller? Hvad er grundlaget for at dele det i to tabeller, når der åbenbart er så mange ting, der skal opfyldes for, at et bestemt felt skal opdateres.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.