it-swarm.com.de

Wie erstelle ich eine virtuelle Spalte mit MySQL SELECT?

Wenn ich SELECT a AS b und b keine Spalte in der Tabelle ist, würde die Abfrage die "virtuelle" Spalte erstellen?

tatsächlich muss ich eine virtuelle Spalte in die Abfrage einbinden und einige Informationen in die Abfrage verarbeiten, damit ich sie später für jedes Element verwenden kann.

59
Skuta

so etwas wie

    SELECT id, email, IF(actived = 1, 'enabled', 'disabled') AS account_status
FROM users

auf diese Weise können Sie Vorgänge ausführen und als Spalten anzeigen.

BEARBEITEN:

sie können auch Verknüpfungen verwenden und Operationen als Spalten anzeigen:

    SELECT u.id, e.email, IF(c.id IS NULL, 'no selected', c.name) as country
FROM users u LEFT JOIN countries c ON u.country_id = c.id
79
Gabriel Sosa

Probieren Sie diese aus, wenn Sie eine virtuelle Spalte "age" in einer select-Anweisung erstellen möchten:

select brand, name, "10" as age from cars...
58
ninsky

Sie können virtuelle Spalten als hinzufügen

SELECT '1' as temp

Wenn Sie jedoch versuchen, die Where-Bedingung auf eine zusätzlich generierte Spalte zu setzen, funktioniert dies nicht und es wird eine Fehlermeldung angezeigt, da die Spalte nicht vorhanden ist.

Wir können dieses Problem lösen, indem wir das SQL-Ergebnis als Tabelle zurückgeben.

SELECT tb.* from (SELECT 1 as temp) as tb WHERE tb.temp = 1
9
rb vishnu

SELECT ruft nur Daten aus der Datenbank ab und ändert die Tabelle selbst nicht.

Wenn du schreibst

SELECT a AS b FROM x

"b" ist nur ein Aliasname in der Abfrage. Es wird keine zusätzliche Spalte erstellt. Ihr Ergebnis im Beispiel würde nur eine Spalte mit dem Namen "b" enthalten. Aber die Spalte in der Tabelle würde "a" bleiben. "b" ist nur ein anderer Name.

Ich verstehe nicht wirklich, was Sie mit "damit ich es später für jeden Gegenstand verwenden kann" meinen. Meinen Sie später in der select-Anweisung oder später in Ihrer Anwendung. Vielleicht könnten Sie einen Beispielcode bereitstellen.

3
Sebastian Dietz

Ihre Syntax würde einen Alias ​​für a als b erstellen, aber über die Ergebnisse der Anweisung hinaus keinen Gültigkeitsbereich haben. Es hört sich so an, als ob Sie eine ANSICHT erstellen möchten

0
cmsjr