Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Abfrageanweisung

SELECT sid, 'Math' as subject, math as mark
FROM your_table
UNION ALL
SELECT sid, 'English' as subject, english as mark
FROM your_table
UNION ALL
SELECT sid, 'French' as subject, french as mark
FROM your_table

Die Hauptursache Ihres Problems ist jedoch ein falsches Datenbankdesign. Diese Themen sollten in erster Linie keine Spalten sein und sollten in einer Tabelle gespeichert werden, ganz ähnlich wie Ihre gewünschte Ausgabe.

Bearbeiten

Was macht es also?

SELECT sid, 'Math' as subject, math as mark
FROM your_table

Gibt die sid zurück Spalte, eine "virtuelle" Spalte mit dem fest codierten Wert 'Math' das den Namen subject erhält . Da Sie den Wert 'Math' nicht gespeichert haben irgendwo musste dies fest codiert werden. Dann selektiert es zuletzt auch die Spalte math mit dem Namen mark stattdessen. Beachten Sie den Unterschied zwischen math und 'Math' - das eine ist eine Spalte, das andere wegen der einfachen Anführungszeichen ein String-Literal.

Dies wird für alle drei Fächer gemacht (wenn Sie vier Fächer hätten, bräuchten Sie vier Teile in der UNION)

Die UNION ALL kombiniert alle drei SELECTs in einer einzigen Abfrage. andr-Lösung (die von jemandem, der sie nicht verstanden hat, herabgestuft wurde) macht dies noch deutlicher, indem sie dies explizit in eine abgeleitete Tabelle (oder Inline-Ansicht) einfügt.

Führen Sie jedes SELECT einzeln aus, um zu sehen, was die einzelnen Teile tun.

Der Teil as mark wird als "Spaltenalias" bezeichnet und kann auch verwendet werden, um Spalten mit demselben Namen aus verschiedenen Tabellen in einem Join abzurufen und dennoch eindeutige Namen in der Ergebnismenge zu haben.