sql >> Database >  >> RDS >> Mysql

mysql union verkeerde kolommen in resultaat

Union werkt per kolom positie NIET naam. Maar u heeft de kolompositie niet gespecificeerd omdat u * . heeft gedaan dus het wordt in een bepaalde volgorde geplukt door de database, maar niet door jou.

De naam van de uiteindelijke resultatenset is de naam van de kolommen in de eerste zoekopdracht in de unie.

De oplossing is eenvoudig:schrijf de namen van alle kolommen die u wilt, en zorg ervoor dat de volgorde consistent blijft tussen alle drie de zoekopdrachten.

De kolommen zijn NIET op naam gesorteerd (dus het hernoemen van de kolommen zal u niet helpen), de volgorde is een interne volgorde in de database.

Gebruik * wordt als een slechte praktijk beschouwd:u weet niet wat u krijgt, en als u slechts enkele kolommen nodig heeft, gebruikt u * haalt meer gegevens op dan nodig is, waardoor de zaken langzamer gaan.

BTW Het benoemen van kolommen als deze (op nummer) is een zeer slechte programmeerpraktijk. Hoe houd je het in hemelsnaam recht? Uw kolommen hebben nummers, uw tabellen hebben nummers. Probeer je verduisterde code te schrijven? Om ervoor te zorgen dat niemand anders ooit aan uw code kan werken? Want als dat zo is, is dit een manier om het te doen.



  1. Verwijder of trim de eerste of laatste paar tekens in MySQL-database met SQL

  2. PHP converteert datetime naar seconden

  3. Een titel toevoegen aan een formulierkoptekst in Microsoft Access

  4. postgresql COUNT (DISTINCT ...) erg traag