Ikke rigtig. Du kan bruge *
kolonnejokertegn
for at vælge alle kolonner. Hvis du forbinder flere tabeller, kan du vælge alle kolonner fra specifik tabel ved at sætte præfikset *
med tabelnavnet eller aliaset:
SELECT a.id, a.title, b.*
FROM articles AS a
JOIN blurbs AS b ON a.id = b.article
Du bør dog ikke bruge *
medmindre du skriver et DB-administrationsprogram.
Alternativt kan du bygge en sætning i SQL eller et andet sprog ved at hente tabelmetadata for at få kolonnenavnene. Ved kun at bruge MySQL kan du forespørge COLUMNS
tabel i INFORMATION_SCHEMA
database for at få kolonnenavnene og bruge GROUP_CONCAT
for at bygge kolonnelisten til sætningen.
SELECT CONCAT(
'SELECT ',
GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '),
' FROM ', :db, '.', :table,
' WHERE ...'
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table
Erstat ":db", ":table" og "..." med de relevante værdier. Du kan endda gøre det til en forberedt erklæring, så du kan bruge det til ethvert bord. Derfra PREPARE
og UDFØR
det konstruerede udsagn.
Hvis du ikke er begrænset til SQL til programmering, burde det være mindre rodet. DB-driveren til dit foretrukne sprog tilbyder sandsynligvis metoder til at hente metadata. Den faktiske implementering ville ligne den rene SQL-tilgang (hent kolonnenavne, samle sætning, forberede, eksekvere), men burde ikke være så grim, da du ville bruge et algoritmisk snarere end deklarativt sprog.
Jeg ville være meget interesseret i at se den situation, at dette faktisk er påkrævet..