/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Optimering af SQL
Fra : Michael Hansen


Dato : 20-09-05 12:18

Hej,

Jeg her en tabel der ser således ud:
id, parentId, name, owner, isFolder

Jeg har brug for at ændre feltet isFolder i de rækker som har et parentId
som er lig med et Id på en af de andre rækker.

Følgende SQL virker, men er sikker på det kan gøres meget simplere. Men
hvordan ?

UPDATE conTable
SET isFolder = 1
WHERE (owner = 'mbh') AND
(id IN
(SELECT t1.parentId FROM conTable t1 WHERE t1.parentId IN
(SELECT t2.id FROM conTable t2))
)

--
Mvh
Michael Hansen



 
 
Jens Gyldenkærne Cla~ (20-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 20-09-05 12:42

Michael Hansen skrev:

> Jeg har brug for at ændre feltet isFolder i de rækker som har
> et parentId som er lig med et Id på en af de andre rækker.

Kan parentId være et vilkårligt tal, eller kun en eksisterende id-
værdi eller null? (det sidste kan opnås med referentiel integritet,
og det kan gøre forespørgslen enklere).

> Følgende SQL virker, men er sikker på det kan gøres meget
> simplere. Men hvordan ?

Hvilken database?


> UPDATE conTable
> SET isFolder = 1
> WHERE (owner = 'mbh') AND
> (id IN
> (SELECT t1.parentId FROM conTable t1 WHERE t1.parentId IN
> (SELECT t2.id FROM conTable t2))
> )

Et par muligheder (MSSQL-syntaks):

   UPDATE conTable
   SET isFolder = 1
   WHERE parentId IS NOT NULL

   UPDATE c
   SET c.isFolder = 1
   FROM conTable c INNER JOIN conTable cp
       ON c.parentID = cp.id

   UPDATE c
   SET isFolder = 1
   FROM conTable c
   WHERE EXISTS (SELECT 1 FROM conTable
               WHERE id = c.parentID)
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Michael Hansen (20-09-2005)
Kommentar
Fra : Michael Hansen


Dato : 20-09-05 13:09

Hej Jens,

> Kan parentId være et vilkårligt tal, eller kun en eksisterende id-
> værdi eller null? (det sidste kan opnås med referentiel integritet,
> og det kan gøre forespørgslen enklere).

parentID vil altid indeholde et tal uanset om posten er en mappe eller ej.
Det er nemlig data til en træstruktur, hvor en mappe kan indeholde mapper.
Det jeg blot skal finde ud af er om om der reffereres til posten fra andre
poster vha parentId'et. For hvis der er det, så må det være en mappe. Med
andre ord kan man sige at jeg vil finde de mapper som ikke er tomme.

> Hvilken database?

Microsoft SQL Server

> Et par muligheder (MSSQL-syntaks):
>
Testede dem men desværre bliver ALLE poster updated.

--
Mvh
Michael Hansen



Nis Jorgensen (20-09-2005)
Kommentar
Fra : Nis Jorgensen


Dato : 20-09-05 18:13

On Tue, 20 Sep 2005 14:09:05 +0200, "Michael Hansen"
<michael@amweb.dk> wrote:

>Hej Jens,
>
>> Kan parentId være et vilkårligt tal, eller kun en eksisterende id-
>> værdi eller null? (det sidste kan opnås med referentiel integritet,
>> og det kan gøre forespørgslen enklere).
>
>parentID vil altid indeholde et tal uanset om posten er en mappe eller ej.
>Det er nemlig data til en træstruktur, hvor en mappe kan indeholde mapper.
>Det jeg blot skal finde ud af er om om der reffereres til posten fra andre
>poster vha parentId'et. For hvis der er det, så må det være en mappe. Med
>andre ord kan man sige at jeg vil finde de mapper som ikke er tomme.

   UPDATE contable
   SET isFolder = 1
   WHERE id IN (SELECT parentID FROM conTable)

Det er stort set den samme som din oprindelige. Du skal bare indse at
dit sidste kriterium er unoedvendigt.

--
Nis Jørgensen
Udlandsbornholmer

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste