Mysql
 sql >> Database >  >> RDS >> Mysql

Istruzione di query SQL

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

Ma la causa principale del tuo problema è una progettazione errata del database. Questi soggetti non dovrebbero essere colonne in primo luogo e dovrebbero essere archiviati in una tabella molto simile all'output desiderato.

Modifica

Allora cosa fa?

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

Restituisce il sid column, una colonna "virtuale" con il valore hardcoded 'Math' a cui viene dato il nome subject . Poiché non hai memorizzato il valore 'Math' da qualche parte, questo doveva essere codificato. Infine seleziona anche la colonna math utilizzando il nome mark invece. Nota la differenza tra math e 'Math' - uno è una colonna l'altro una stringa letterale a causa delle virgolette singole.

Questo viene fatto per tutte e tre le materie (se avessi quattro materie, avresti bisogno di quattro parti nell'UNIONE)

UNION ALL combina tutti e tre i SELECT in un'unica query. andr solution (che è stato declassato da qualcuno che non l'ha capito) lo rende ancora più chiaro inserendolo esplicitamente in una tabella derivata (o vista in linea).

Esegui ogni SELECT da solo per vedere cosa stanno facendo le singole parti.

La parte as mark è chiamato "alias di colonna" e può essere utilizzato anche per recuperare colonne con lo stesso nome da tabelle diverse in un join e avere ancora nomi univoci nel set di risultati.