2009-01-18 16 views
48

Wenn ich SELECT ein AS b und b ist keine Spalte in der Tabelle, würde Abfrage erstellen Sie die "virtuelle" Spalte?Wie erstellt man eine virtuelle Spalte mit MySQL SELECT?

In der Tat muss ich einige virtuelle Spalte in die Abfrage einbinden und einige Informationen in die Abfrage verarbeiten, so dass ich es später mit jedem Element verwenden kann.

+1

ich die Frage ein paar Mal gelesen habe und es muss etwas, was ich vermisst habe. Könntest du ein bisschen genau erklären, wonach du suchst? –

+0

Stellen Sie sich die Abfrage als Array von Zeilen und Spalten vor. Normalerweise vererbe ich Spalten einfach durch SELECT * FROM aus der Tabellenstruktur, aber jetzt müsste ich eine eigene Spalte einfügen. – Skuta

+2

vielleicht sollten Sie _one_ Blick auf die Dokumentation .. – hop

Antwort

63

so etwas wie

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

dies ermöglicht es Ihnen, Operationen und zeigen Sie es als Spalten zu machen.

EDIT:

Sie schließt sich und zeigen operaitons als Spalten verwenden können:

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 
+0

Dieser Beitrag bewegt mein Wissen über einfache mysql-Anweisungen einen Weg nach vorne :), bedeutet es, ich kann jede "Spalte" ?? – Skuta

+0

ja! wie Magie..! –

+1

Sie können diese neue Spalte aber nicht für Operationen oder neue IF-Auswertungen verwenden ... oder ja? – Luis

3

SELECT nur Daten aus der Datenbank abruft, ist es nicht die Tabelle selbst ändern.

Wenn Sie

SELECT a AS b FROM x 

"b" schreiben ist nur ein Alias-Name in der Abfrage. Es erstellt keine zusätzliche Spalte. Ihr Ergebnis in dem 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 du meinst mit "so kann ich es später mit jedem Artikel verwenden". Meinst du später in der Select-Anweisung oder später in Ihrer Anwendung. Vielleicht könnten Sie einen Beispielcode bereitstellen.

0

Ihre Syntax würde einen Alias ​​für ein as b erstellen, hätte aber keinen weiteren Geltungsbereich als die Ergebnisse der Anweisung. Es klingt wie Sie diese ein ein VIEW

49

Versuchen erstellen möchten, wenn Sie eine virtuelle Spalte „Alter“ in einer select-Anweisung erstellt werden soll:

select brand, name, "10" as age from cars... 
+0

Guter Trick. Einfach, aber ich hatte das noch nie zuvor versucht.Genau das habe ich mich gefragt! : D – Atomox

+1

Danke, einfach und klar !! – realmag777

+0

Hier ist ein kleiner komplizierter Trick für die Arbeit mit anderen Tabellen in derselben mysql-Abfrage: SELECT tpt. *, (SELECT COUNT (*) FROM Orte WHERE tpt.id = places.type) als obj_count FROM 'Orte_Typen' als tpt ORDER BY tpt.name ASC LIMIT?,? – realmag777

6

Sie virtuelle Spalten als

hinzufügen können
SELECT '1' as temp 

Wenn Sie jedoch versuchen, die Bedingung in die zusätzlich generierte Spalte einzufügen, funktioniert sie nicht und es wird eine Fehlermeldung angezeigt, da die Spalte nicht existiert.

Wir haben dieses Problem durch die Rückkehr SQL Ergebnis als table.ie lösen können,

SELECT tb.* from (SELECT 1 as temp) as tb WHERE tb.temp = 1 
Verwandte Themen