gpt4 book ai didi

MySQL 认证指南练习 Qn - View 的列名

转载 作者:行者123 更新时间:2023-11-29 03:15:10 26 4
gpt4 key购买 nike

问题是

Which of the following methods for providing explicit names for the columns in a view work?a. Include a column listb. Provide column aliases in the view SELECT statementc. Rename the columns when you select from the view

回答

a. Works: Include a column listb. Works: Provide column aliases in the view SELECT statementc. Does not work: Rename the columns when you select from the view

关于 (c) “从 View 中选择时重命名列”是什么意思?

最佳答案

我认为认证指南中的问题措辞不当。当您从 View 中进行选择时,您可以为列指定显式名称,这很有效:

CREATE VIEW MyView AS SELECT a, b, c FROM MyTable;
SELECT a AS d, b AS e, c AS f FROM MyView;

问题不在于显式地为列指定别名。这就是问题所在:如果您依赖于此而不是定义具有不同列名的 View ,并且该 View 由一个连接组成,使得列名不明确,那么您就会遇到麻烦:

CREATE VIEW MyView AS 
SELECT m.a, m.b, m.c, o.a, o.b, o.c
FROM MyTable m JOIN OtherTable o;

这不是一个有效的 View ,因为在 View 定义中,所有的列名必须是不同的。例如,查询 View 时会得到不明确的结果:

SELECT a FROM MyView;

这是选择第一个 a 列还是第二个 a 列?

因此您必须在 View 定义中有一组不同的列名,这不足以在您查询 View 时使它们不同。

这就是我认为认证指南问题措辞不当的原因。这与显式重命名列无关,而是确保 View 的列具有不同的名称。这是重命名列的常见原因,所以这可能就是写问题的人那样写的原因。


问题中提到的任何其他技术都可以解决歧义:

CREATE VIEW MyView (a, b, c, d, e, f) AS 
SELECT m.a, m.b, m.c, o.a, o.b, o.c
FROM MyTable m JOIN OtherTable o;

CREATE VIEW MyView AS 
SELECT m.a, m.b, m.c, o.a AS d, o.b AS e, o.c AS f
FROM MyTable m JOIN OtherTable o;

无论哪种方式,您都会得到别名列:

SELECT * FROM MyView; -- returns result with columns a, b, c, d, e, f

关于MySQL 认证指南练习 Qn - View 的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com