webForumDet fria alternativet

Hämta alla fält FÖRUTOM ett.

Databaser & SQL

8 svar · 553 visningar · startad av trexter.com

Medlem sedan apr. 20021 203 inlägg
Frågan#1

Antagligen går det inte men det är lika bra att fråga.

SELECT * väljer alla kolumner.
SELECT namn1, namn2 osv väljer vissa utvalda kolumner.

Kan man på något sätt välja alla kolumner förutom en?
Typ SELECT * - Texten

Det hade varit ganska praktiskt när man nyttjar 19 av 20 kolumner och den tjugonde är full med tusentals tecken.

:)

Medlem sedan dec. 200012 464 inlägg
#2

Nej, det går inte. Skapa en vy i såfall.

Flyttas från ASP.

Medlem sedan apr. 20021 203 inlägg
#3

vy?

:)

Medlem sedan feb. 200112 078 inlägg
#4

Välj bara de du behöver och spara prestanda samtidigt, alltså:

SELECT kol1, kol2, kol3, kol4 FROM table
Medlem sedan dec. 200012 464 inlägg
#5

Ja vystt. Vyer finns i alla RDBMS (ja inte i Mysql).

create view allbutone as
select c1,c2,c3 ..c19
from t

sen så kan du använda allbutone precis som om det vore en tabell,

Medlem sedan apr. 20021 203 inlägg
#6

Alltså:
select c1,c2,c3 ..c19.....

ska vara en komplett SQL-fråga va?
Och förresten, innebär en sådan här "omväg" en stor prestandaförlust?

:)

Medlem sedan dec. 200012 464 inlägg
#7

Ja som ett vanligt select-statement och någon prestandaförlust blir det inte

Medlem sedan juni 20022 599 inlägg
#8

Apropos prestanda så läste jag nånstans att i vissa fall så kan faktiskt

SELECT col1 FROM tbl1 where ..

vara långsammare än

SELECT * FROM tbl1 where ..

Guldstjärna till den som kan säga när. :)

Medlem sedan nov. 2002105 inlägg
#9

I vissa fall kan

Select col1, col2 from...

vara långsammare än

Select * from...

då databasen först måste verifiera att de namngivna kolumnerna finns innan den exekverar sql satsen. Om man använder en databas som stöder lagrade procedurer så kan man lägga frågan i en sådan. Då verifieras kolumnnamnen och en exekveringsplan skapas första gången proceduren körs. Därefter cachas den och det går snabbare att köra den nästa gång.

Om man dock endast är ute efter ett fåtal kolumner är det bättre att namnge dessa istället för att göra en select *. Annars skickar man hela raden över nätverket istället för att skicka den info man är ute efter.

(pust....)

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)