76

如果我 SELECT a AS b 并且 b 不是表中的列,查询会创建“虚拟”列吗?

实际上,我需要将一些虚拟列合并到查询中,并将一些信息处理到查询中,以便以后可以将其与每个项目一起使用。

4

7 回答 7

99

就像是:

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

这允许您进行操作并将其显示为列。

编辑:

您还可以将连接和显示操作用作列:

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
于 2009-01-18T15:01:06.633 回答
70

如果你想在 select 语句中创建一个虚拟列“age”,试试这个:

select brand, name, "10" as age from cars...
于 2011-07-09T09:42:27.917 回答
15

您可以将虚拟列添加为

SELECT '1' as temp

但是,如果您尝试将 where 条件添加到额外生成的列,它将不起作用并且会显示错误消息,因为该列不存在。

我们可以通过将 sql 结果作为表返回来解决这个问题。即,

SELECT tb.* from (SELECT 1 as temp) as tb WHERE tb.temp = 1
于 2015-01-01T06:11:24.453 回答
3

SELECT 仅从数据库中检索数据,它不会更改表本身。

如果你写

SELECT a AS b FROM x

“b”只是查询中的别名。它不会创建额外的列。您在示例中的结果将只包含一个名为“b”的列。但表中的列将保持“a”。“b”只是另一个名字。

我真的不明白你的意思是“所以我以后可以在每个项目上使用它”。您是指稍后在 select 语句中还是在您的应用程序中稍后。也许您可以提供一些示例代码。

于 2009-01-18T15:07:24.687 回答
2

您可以使用 CASE 语句,例如

SELECT name
       ,address
       ,CASE WHEN a < b THEN '1' 
             ELSE '2' END AS one_or_two
FROM ...
于 2020-06-27T23:36:50.760 回答
0

您的语法将为 a 创建一个别名作为 b,但它的范围不会超出语句的结果。听起来您可能想创建一个VIEW

于 2009-01-18T15:08:08.583 回答
0

请参阅MariaDB 文档。虚拟列是通过在VIRTUAL列中添加关键字同时在其之前添加表达式来创建的。好消息:您可以向虚拟列添加索引。如果您需要实际值并且担心存储速度过快,请使用PERSISTENT列。

于 2021-12-06T19:22:48.760 回答