Avatar billede anderskj1 Nybegynder
05. august 2003 - 16:05 Der er 11 kommentarer

Problem med Insert

Hejsa

Jeg skal lave dette INSERT


INSERT T_TagDefinition (T_ModelId, [Name], ArrayIndex, TagBoundaryValueId,TagBoundaryGradientId, TagTypeId )
   
Disse værdier i T_TagDefinition tabellen er erklæret NOT NULL. INSERTET skal være en flettet forspørgelse, og der der skal indsættes bliver hentet vha. af et SELECT fra flere tabeller.

Men hvordan gør jeg dette i ét hug? Altså vælger 6 nøgler fra 3 tabeller og insætter dem i et hug.

Kan jeg lave flere selects efter hinanden i samme udtryk og så jeg får resultatet af ALLE selects?

Mit hovede problem er at jeg ikke har de værdier på forhånd som skal indsættes og da alle er NOT NULL kan jeg ikke nøjes med delvist at indsætte dem,...Alle skal finde smed det samme.

Håber I forstod det. Eller prøver jeg bare at forklere det igen.
Avatar billede pierrehusted Nybegynder
05. august 2003 - 16:09 #1
Kan du lave en samlet SELECT (med nogle JOINs), som viser dig de data du skal INSERTe ?

Hvordan ser de tabeller ud du skal hente fra ??
Avatar billede Slettet bruger
05. august 2003 - 16:16 #2
Det kan du godt,
insert into tabel (felt1,felt2,felt3) values (select felt1,felt2,felt3 from tabel1,tabel2 where ......)
Avatar billede anderskj1 Nybegynder
05. august 2003 - 22:09 #3
Hvad jeg ønsker af funktionalitet er at kunne gøre noget ligende flg.

INSERT T_TagDefinition (T_ModelId, [Name], ArrayIndex, TagBoundaryValueId,
                        TagBoundaryGradientId, TagTypeId )
        SELECT [Id] FROM T_TagBoundaryValue1,
    SELECT [Id] FROM T_TagBoundaryValue2,
    SELECT [Id] FROM T_TagBoundaryValue3,
    SELECT [Id] FROM T_TagBoundaryValue4,
    SELECT [Id] FROM T_TagBoundaryValue5,
    SELECT [Id] FROM T_TagBoundaryValue6

De tabeller jeg skal hente de enkelt stående værdier fra har ingen relationer.

Kan dette gøres? Altså at SELECTE fra forskellige tabeller i det samme udtryk?
Avatar billede venne Nybegynder
06. august 2003 - 08:42 #4
Det lyder som om du kan bruge UNION.
Eksempel:

INSERT INTO tabel1 (x)
SELECT a FROM tabel2
UNION
SELECT b FROM tabel3
UNION
SELECT c FROM tabel4

og så videre...
Avatar billede pierrehusted Nybegynder
06. august 2003 - 08:55 #5
Ja, det lyder til at du vil kunne gøre det med noge UNIONs. Men du skal lige sørge for at du får dataene i den rigtige orden:


INSERT INTO tabel1 (x)
SELECT a FROM tabel2 ORDER BY feltnavn
UNION
SELECT b FROM tabel3 ORDER BY feltnavn
UNION
SELECT c FROM tabel4 ORDER BY feltnavn
Avatar billede venne Nybegynder
06. august 2003 - 09:05 #6
pierrehusted>
Hvorfor det? Rækkefølgen af rækker i INSERT er uden betydning.

I øvrigt kan du først lave ORDER BY efter den sidste SELECT.
Avatar billede pierrehusted Nybegynder
07. august 2003 - 14:28 #7
Som jeg kan se det skal de 6 felter skal have data fra 6 forskellige tabeller. Derfor ville jeg forsøge at sikre at de var sorteret i samme orden.
Og, ja - der er da noget om at ORDER BY skal til allersidst i forbindelse med UNION.

Måske sådan her:


INSERT T_TagDefinition (T_ModelId, [Name], ArrayIndex, TagBoundaryValueId, TagBoundaryGradientId, TagTypeId )
SELECT [Id] FROM T_TagBoundaryValue1
UNION
SELECT [Id] FROM T_TagBoundaryValue2
UNION
SELECT [Id] FROM T_TagBoundaryValue3
UNION
SELECT [Id] FROM T_TagBoundaryValue4
UNION
SELECT [Id] FROM T_TagBoundaryValue5
UNION
SELECT [Id] FROM T_TagBoundaryValue6
ORDER BY feltnavn
Avatar billede trer Nybegynder
07. august 2003 - 16:09 #8
Gør lige dig selv en tjeneste; Brug UNION ALL fremfor UNION medmindre du virkelig vil have dubletter fjernet.

Når du bruger UNION har du en implicit DISTINCT som medfører en sortering af data før indsættelse - og det brager performance ned.
Avatar billede ldanielsen Nybegynder
18. august 2003 - 14:25 #9
Du kan lave select'en sådan

SELECT (SELECT [Id] FROM T_TagBoundaryValue1),
    (SELECT [Id] FROM T_TagBoundaryValue2),
    (SELECT [Id] FROM T_TagBoundaryValue3),
    (SELECT [Id] FROM T_TagBoundaryValue4),
    (SELECT [Id] FROM T_TagBoundaryValue5),
    (SELECT [Id] FROM T_TagBoundaryValue6)
Avatar billede Slettet bruger
24. september 2003 - 20:14 #10
Lukketid?
Avatar billede Slettet bruger
11. november 2003 - 22:27 #11
??
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester