Spíš ne. Můžete použít *
zástupný znak sloupce
pro výběr všech sloupců. Pokud spojujete více tabulek, můžete vybrat všechny sloupce z konkrétní tabulky přidáním předpony *
s názvem tabulky nebo aliasem:
SELECT a.id, a.title, b.*
FROM articles AS a
JOIN blurbs AS b ON a.id = b.article
Neměli byste však používat *
pokud nepíšete program pro administraci DB.
Alternativně můžete vytvořit příkaz v SQL nebo jiném jazyce načtením metadat tabulky, abyste získali názvy sloupců. Pomocí pouze MySQL můžete dotazovat COLUMNS
tabulka v INFORMATION_SCHEMA
databázi získat názvy sloupců a použít GROUP_CONCAT
k vytvoření seznamu sloupců pro příkaz.
SELECT CONCAT(
'SELECT ',
GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '),
' FROM ', :db, '.', :table,
' WHERE ...'
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table
Nahraďte ":db", ":table" a "..." příslušnými hodnotami. Můžete jej dokonce přeměnit na připravený výpis, takže jej můžete použít pro jakýkoli stůl. Odtud PREPARE
a EXECUTE
vytvořený příkaz.
Pokud se při programování neomezujete na SQL, mělo by to být méně chaotické. Ovladač DB pro vámi zvolený jazyk pravděpodobně nabízí metody pro získání metadat. Skutečná implementace by byla podobná čistému přístupu SQL (získání názvů sloupců, sestavování příkazů, příprava, provádění), ale neměla by být tak ošklivá, protože byste používali spíše algoritmický než deklarativní jazyk.
Velmi by mě zajímala situace, kdy je to skutečně vyžadováno..