webForumDet fria alternativet

Skapa ny kolumn utifrån två existerande

Databaser & SQL

9 svar · 489 visningar · startad av CokeLight

Medlem sedan juni 2000504 inlägg
Frågan#1

Hejsan,

Tabellen har en foto (string) kolumn vars värde ska bestå av förnamn och efternamn kolumnerna, så att slutvärdet blir fornamn_efternamn.jpg

Jag har sökt lite men får inte ihop nåt ändå... provade nedanstående SQL som inte funkar alls :)

INSERT INTO personal(id, Sortering, foto) 
SELECT DISTINCT id, Sortering,
(SELECT f_namn
UNION SELECT '_' 
e_namn
UNION SELECT '.jpg' FROM personal p2 WHERE p2.id = p1.id)
FROM personal AS p1

Nån som har nåt förslag...? :) Dessutom så får id kolumnen inte var null och jag får heller inte ha duplicate values...

Medlem sedan dec. 200012 464 inlägg
#2

Varför behöver du lagra det i tabellen?

select f_namn || '_' || e_namn || '.jpg' from personal
Medlem sedan juni 2000504 inlägg
#3

aha, är det så man skriver.. ska prova senare ikväll.. tack så mycket.. du har hjälpt många gånger.. :)

jo, jag drog mig för det ganska länge för jag ville lägga det i code-behind filen i en datagrid men kom inte på syntaxen riktigt.. däremot var det inga problem att få in kolumndata (från databasen) o lägga in den i datagriden.. så det är lite därför.. så jag tänkte att det går snabbare att lägga det i databasen tills vidare men så körde jag fast där också :)

Hör av mig sen... tack igen

Medlem sedan dec. 200012 464 inlägg
#4

Jo, en detalj. Jag använde || för att konkatenera strängar men syntaxen för detta kan skilja sig mellan olika databashanterare.

Medlem sedan nov. 2003569 inlägg
#5

äre SQL-server så är det + man använder

Medlem sedan juni 2000504 inlägg
#6

Hejsan.. :) det kom en massa annat emellan.. kunde inte prova förrän nu... tack för inläggen... jo precis.. jag kör sql-server.. har för mig att oracle kör med union för att konkatenera?

så jag ändrade i alla fall till:

INSERT INTO personal(id, Sortering, foto) 
SELECT DISTINCT id, Sortering,
(SELECT DISTINCT f_namn + '_' + e_namn + '.jpg' FROM personal p2 WHERE p2.id = p1.id)
FROM personal AS p1

... får då felet att

Violation of PRIMARY KEY constraint 'PK_xyz'. Cannot insert duplicate key in object 'personal'.
The statement has been terminated.

måste man köra nån subquery som förhindrar duplicates..? hur var det.. nåt med count < 1 eller varför blir det så...?

Medlem sedan juni 200032 967 inlägg
#7

har för mig att oracle kör med union för att konkatenera?

Nej, UNION är något helt annat, och inte specifikt för Oracle. Man använder CONCAT för att konkatenera.

Medlem sedan juni 2000504 inlägg
#8

a jo, nä jag menade att jag sett att man kan använda union för att konkatenera in vanliga ord i sin query.. fast jag kanske har fel? jag har för mig att jag gjort det nån gång innan jag visste det här som LarsG och Nöff berättade om || och + ... typ om man inte jobbar med en extern applikation och vill att det i själva output fönstret ska stå

Olle tjänar
-------------
80 kr

där man då kan selecta fram "olle tjänar" union det som ger 80 union select "kr"... fast det är förstås vanskligt :)

Läste alldeles nyss att det var Oracle som ju körde med ||

Medlem sedan juni 200032 967 inlägg
#9

Man kan säkert använda både CONCAT och ||.

med UNION slår du ihop resultatet av två (eller fler) SQL-frågor till ett resultatset.

SELECT 'Foo' AS Bar FROM Foo
UNION
SELECT 'Bar' FROM Bar

Resulterar i två poster:

Bar
---------
Foo
Bar
Medlem sedan juni 2000504 inlägg
#10

a så var det ja.. tackar.. :)

286 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
146 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)