How to create virtual column using MySQL SELECT?

PhpMysqlSelect

Php Problem Overview


If I do SELECT a AS b and b is not a column in the table, would query create the "virtual" column?

in fact, I need to incorporate some virtual column into the query and process some information into the query so I can use it with each item later on.

Php Solutions


Solution 1 - Php

Something like:

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

This allows you to make operations and show it as columns.

EDIT:

you can also use joins and show operations as columns:

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

Solution 2 - Php

Try this one if you want to create a virtual column "age" within a select statement:

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

Solution 3 - Php

You can add virtual columns as

SELECT '1' as temp

But if you tries to put where condition to additionally generated column, it wont work and will show an error message as the column doesn't exist.

We can solve this issue by returning sql result as a table.ie,

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

Solution 4 - Php

SELECT only retrieves data from the database, it does not change the table itself.

If you write

SELECT a AS b FROM x

"b" is just an alias name in the query. It does not create an extra column. Your result in the example would only contain one column named "b". But the column in the table would stay "a". "b" is just another name.

I don't really understand what you mean with "so I can use it with each item later on". Do you mean later in the select statement or later in your application. Perhaps you could provide some example code.

Solution 5 - Php

You could use a CASE statement, like

SELECT name
       ,address
       ,CASE WHEN a < b THEN '1' 
             ELSE '2' END AS one_or_two
FROM ...

Solution 6 - Php

Your syntax would create an alias for a as b, but it wouldn't have scope beyond the results of the statement. It sounds like you may want to create a VIEW

Solution 7 - Php

See MariaDB Docs. Virtual columns are create by adding the keyword VIRTUAL to the column while adding an expression just before that. The good thing: you can add an index to the virtual column. If you need the actual values and are concerned about speed over storage use a PERSISTENT column.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSkutaView Question on Stackoverflow
Solution 1 - PhpGabriel SosaView Answer on Stackoverflow
Solution 2 - PhpninskyView Answer on Stackoverflow
Solution 3 - PhpVishnuPrasadView Answer on Stackoverflow
Solution 4 - PhpSebastian DietzView Answer on Stackoverflow
Solution 5 - Phpjazcap53View Answer on Stackoverflow
Solution 6 - PhpcmsjrView Answer on Stackoverflow
Solution 7 - Phptheking2View Answer on Stackoverflow