siDDis Skrevet 2. oktober 2008 Del Skrevet 2. oktober 2008 Prøver å kjøre denne koden, men får det ikkje til å fungere så lenge eg kjører self-join. UPDATE language_text lt1 SET lt1.parent_id = ( SELECT lt2.id FROM language_text lt2 WHERE lt1.text_id = lt2.text_id AND lt2.language = 1 ); For å forklare betre så jobber eg med språktabeller, og trengte eit ekstrafelt for å henvise til kva slags tekster som er nøkkeltekster til andre tekster. F.eks så vil eg at parent_id alltid skal referere til dei engelske tekstane Så norske og svenske tekstar er barn av engelsk. text_id refererer til tekst objektet, som inneheld tekstane i forskjellige språk, language seier kva slags språk det er. Der 1 = engelsk. id feltet er ein unik id for heile tabellen. Lenke til kommentar
kaffenils Skrevet 2. oktober 2008 Del Skrevet 2. oktober 2008 Litt vanskelig å hjelpe når du ikke sier hva som går galt. Hva med å prøve denne syntaxen: update lt1 set parent_id=lt2.id from language_text lt1 inner join language_text lt2 on lt1.text_id=lt2.text_id and lt2.language=1 Lenke til kommentar
siDDis Skrevet 3. oktober 2008 Forfatter Del Skrevet 3. oktober 2008 God morgen! Eg prøvde en from syntax men etter litt googling så fant eg ut at MySQL ikkje støtta det. Feilmeldinga eg får er: You can't specify target table 'lt3' for update in FROM clause Lenke til kommentar
kaffenils Skrevet 3. oktober 2008 Del Skrevet 3. oktober 2008 Tror ikke UPDATE statementet støtter aliasing av tabellen som skal oppdateres mår syntaxen er slik som dette. Jeg fjernet alias lt1 og refererte til hele tabellnavnet i subquerien. Da virket det iallefall på SQL Server. Synd ikke MySQL støtter UPDATE ... FROM, det hadde gjort ting mye enklere. UPDATE language_text SET parent_id = ( SELECT lt2.id FROM language_text lt2 WHERE language_text.text_id = lt2.text_id AND lt2.language = 1 ); Lenke til kommentar
siDDis Skrevet 3. oktober 2008 Forfatter Del Skrevet 3. oktober 2008 (endret) Nå fant eg ut av det! Med litt hacking og surr osv. så fungerte denna spørringa UPDATE language_text as lt1 INNER JOIN ( SELECT lt2.id, lt2.text_id FROM language_text lt2 ) AS x on lt1.id = x.id SET lt1.parent_id = ( SELECT parent_id FROM ( SELECT * FROM language_text ) AS y WHERE y.text_id = x.text_id AND y.language = 1 ); Tingen er det at for å kunne utføre self join så må du ha ein ekstra subquery inni subqueryen Endret 3. oktober 2008 av siDDIs Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå