|
| Betinget insert i PostgreSQL? Fra : Mikkel Carlsen |
Dato : 18-02-02 22:00 |
|
Er det muligt at koge nedenstående pseudokode net til et enkelt
statement? Jeg vil gerne undgå at afvente select i mit script før jeg
kan lave den endelige insert (3. linie).
$id = SELECT id FROM names WHERE name='Hans'
if(!$id) $id = INSERT INTO names (name) VALUES ('Hans')
INSERT INTO main_table (name_id, ...) VALUES ($id, ...)
Det jeg har brug for er vel egentlig en slags betinget insert som så
kunne nestes ind i det sidste statement.
-Mikkel
| |
Henrik Jochumsen (19-02-2002)
| Kommentar Fra : Henrik Jochumsen |
Dato : 19-02-02 17:06 |
|
Hvis du laver feltet "name" til PRIMARY KEY, så kan du jo bare insætte og
derefter se om det går godt..:)
Ellers er der vist ikke så meget at gøre..
Mvh
Henrik Jochumsen
hj@noprobs.dk
> Er det muligt at koge nedenstående pseudokode net til et enkelt
> statement? Jeg vil gerne undgå at afvente select i mit script før jeg
> kan lave den endelige insert (3. linie).
>
> $id = SELECT id FROM names WHERE name='Hans'
> if(!$id) $id = INSERT INTO names (name) VALUES ('Hans')
> INSERT INTO main_table (name_id, ...) VALUES ($id, ...)
>
> Det jeg har brug for er vel egentlig en slags betinget insert som så
> kunne nestes ind i det sidste statement.
| |
Mikkel Carlsen (19-02-2002)
| Kommentar Fra : Mikkel Carlsen |
Dato : 19-02-02 20:13 |
|
Henrik Jochumsen wrote:
>Hvis du laver feltet "name" til PRIMARY KEY, så kan du jo bare insætte og
>derefter se om det går godt..:)
>
Du mener vel UNIQUE? Har overvejet at hacke mig ud af problemet ved at
gøre noget lignende:
INSERT INTO names (name) VALUES ('Hans'); INSERT INTO main_table (name_id, ...) VALUES (SELECT id FROM names WHERE name='Hans'), ...)
Men det synes jeg nu ikke er særligt kønt, både fordi det giver noget rod i min log og fordi jeg kører en insert hvor det i ~99,9% af tilfældende ikke er nødvendigt.
-Mikkel
>
>Ellers er der vist ikke så meget at gøre..
>
>Mvh
> Henrik Jochumsen
> hj@noprobs.dk
>
>>Er det muligt at koge nedenstående pseudokode net til et enkelt
>>statement? Jeg vil gerne undgå at afvente select i mit script før jeg
>>kan lave den endelige insert (3. linie).
>>
>>$id = SELECT id FROM names WHERE name='Hans'
>>if(!$id) $id = INSERT INTO names (name) VALUES ('Hans')
>>INSERT INTO main_table (name_id, ...) VALUES ($id, ...)
>>
>>Det jeg har brug for er vel egentlig en slags betinget insert som så
>>kunne nestes ind i det sidste statement.
>>
| |
Henrik Jochumsen (20-02-2002)
| Kommentar Fra : Henrik Jochumsen |
Dato : 20-02-02 08:50 |
|
>
> >Hvis du laver feltet "name" til PRIMARY KEY, så kan du jo bare insætte
og
> >derefter se om det går godt..:)
> >
> Du mener vel UNIQUE? Har overvejet at hacke mig ud af problemet ved at
> gøre noget lignende:
PRIMARY KEYs har vel også UNIQUE egenskaber.:)
> INSERT INTO names (name) VALUES ('Hans'); INSERT INTO main_table (name_id,
....) VALUES (SELECT id FROM names WHERE name='Hans'), ...)
>
> Men det synes jeg nu ikke er særligt kønt, både fordi det giver noget rod
i min log og fordi jeg kører en insert hvor det i ~99,9% af tilfældende ikke
er nødvendigt.
>
Den pæne måde er nok at checke med en SELECT, og derefter INSERT'e, så kan
andre også forstå det.:)
Mvh
Hj
| |
|
|