Gå til innhold

Korleis kjøre self join i eit update statement i MySQL?


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av siDDIs
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...