sql >> Database >  >> RDS >> Mysql

SQL-queryinstructie

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

Maar de hoofdoorzaak van uw probleem is een verkeerd databaseontwerp. Die onderwerpen zouden in de eerste plaats geen kolommen moeten zijn en moeten worden opgeslagen in een tabel die erg lijkt op de gewenste uitvoer.

Bewerken

Dus wat doet het?

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

Retourneert de sid kolom, een "virtuele" kolom met de hardgecodeerde waarde 'Math' dat krijgt de naam subject . Omdat je de waarde 'Math' . niet hebt opgeslagen ergens moest dit hardcoded zijn. Dan selecteert het eindelijk ook de kolom math met de naam mark in plaats van. Let op het verschil tussen math en 'Math' - de ene is een kolom, de andere een letterlijke tekenreeks vanwege de enkele aanhalingstekens.

Dit wordt gedaan voor alle drie de vakken (als je vier vakken had, heb je vier onderdelen nodig in de UNION)

De UNION ALL combineert alle drie SELECT's in één enkele query. andr-oplossing (die is weggestemd door iemand die het niet begreep) maakt dit nog duidelijker door dat expliciet in een afgeleide tabel (of inline-weergave) te plaatsen.

Voer elke SELECT afzonderlijk uit om te zien wat de afzonderlijke onderdelen doen.

Het onderdeel as mark wordt een "kolomalias" genoemd en kan ook worden gebruikt om kolommen met dezelfde naam uit verschillende tabellen in een join op te halen en toch unieke namen in de resultatenset te hebben.



  1. Het effect van `mysqli_real_escape_string` . omkeren

  2. Dagelijkse toegang beperken

  3. Libreoffice installeren op Ubuntu 16.04

  4. Mysql datetime-formaat 10 minuten toevoegen