Nicht wirklich. Sie können den *
verwenden Spaltenplatzhalter
um alle Spalten auszuwählen. Wenn Sie mehrere Tabellen zusammenführen, können Sie alle Spalten aus einer bestimmten Tabelle auswählen, indem Sie *
voranstellen mit dem Tabellennamen oder Alias:
SELECT a.id, a.title, b.*
FROM articles AS a
JOIN blurbs AS b ON a.id = b.article
Sie sollten jedoch nicht *
verwenden es sei denn, Sie schreiben ein DB-Verwaltungsprogramm.
Alternativ können Sie eine Anweisung in SQL oder einer anderen Sprache erstellen, indem Sie Tabellenmetadaten abrufen, um die Spaltennamen zu erhalten. Wenn Sie nur MySQL verwenden, können Sie die COLUMNS
Tabelle im INFORMATION_SCHEMA
Datenbank, um die Spaltennamen zu erhalten und verwenden Sie GROUP_CONCAT
um die Spaltenliste für die Anweisung zu erstellen.
SELECT CONCAT(
'SELECT ',
GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '),
' FROM ', :db, '.', :table,
' WHERE ...'
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table
Ersetzen Sie ":db", ":table" und "..." durch die entsprechenden Werte. Sie können es sogar in eine vorbereitete Anweisung umwandeln, sodass Sie es für jede Tabelle verwenden können. Von dort PREPARE
und EXECUTE
die konstruierte Anweisung.
Wenn Sie beim Programmieren nicht auf SQL beschränkt sind, sollte es weniger chaotisch sein. Der DB-Treiber für die Sprache Ihrer Wahl bietet wahrscheinlich Methoden zum Abrufen von Metadaten. Die eigentliche Implementierung wäre dem reinen SQL-Ansatz ähnlich (Spaltennamen abrufen, Anweisung zusammenbauen, vorbereiten, ausführen), sollte aber nicht so hässlich sein, da Sie eher eine algorithmische als eine deklarative Sprache verwenden würden.
Mich würde sehr interessieren, in welcher Situation dies tatsächlich erforderlich ist..