Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL认证指南练习Qn-视图的列名_Mysql_Sql_View - Fatal编程技术网

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

MySQL认证指南练习Qn-视图的列名,mysql,sql,view,Mysql,Sql,View,问题是 Which of the following methods for providing explicit names for the columns in a view work? a. Include a column list b. Provide column aliases in the view SELECT statement c. Rename the columns when you select from the view 答复 a. Works: Include

问题是

Which of the following methods for providing explicit names for the columns in a view work? a. Include a column list b. Provide column aliases in the view SELECT statement c. Rename the columns when you select from the view 答复

a. Works: Include a column list b. Works: Provide column aliases in the view SELECT statement c. Does not work: Rename the columns when you select from the view
关于c,当您从视图中选择时,重命名列是什么意思?

当您选择时,重命名列肯定意味着从视图中选择a作为b等。对于为列提供显式名称的给定任务,它不起作用的原因是不需要显式,视图中明确的a供您重命名。。。除非您已经通过方法a或b消除了歧义[[在这种情况下,您也可以这样重命名,但这几乎是第二个问题!-]。

我认为认证指南中的问题措词不当。当您从视图中选择时,可以为列指定显式名称,这将起作用:

CREATE VIEW MyView AS SELECT a, b, c FROM MyTable;
SELECT a AS d, b AS e, c AS f FROM MyView;
问题不在于显式为列指定别名。问题在于:如果您依赖于此,而不是使用不同的列名定义视图,并且视图包含一个连接,因此列名不明确,那么您会遇到麻烦:

CREATE VIEW MyView AS 
  SELECT m.a, m.b, m.c, o.a, o.b, o.c 
  FROM MyTable m JOIN OtherTable o;
这不是有效的视图,因为在视图定义中,所有列名都必须是不同的。例如,在查询视图时,可能会得到不明确的结果:

SELECT a FROM MyView;
这是选择第一列还是第二列

因此,在视图定义中必须有一组不同的列名,在查询视图时使它们不同是不够的

这就是我认为认证指南问题措词不当的原因。这不是显式重命名列,而是确保视图的列具有不同的名称。这是重命名列的一个常见原因,所以这可能就是写问题的人这样写的原因

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

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;

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

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

我无法想象他们在这里的意思。也许是你所希望和希望的专栏?在列之前运行ALTER VIEW语句?我和你一样好奇。我真的不明白,视图中不需要有一个明确的,明确的a,你就可以重命名。。。是否有输入错误?我的意思是:除非您为CREATE视图中的每一列提供列列表或as子句。。。如果选择,视图的实际列的名称就不明确了。它们在技术上是明确的,因为不允许重复,但对读者来说不一定是明确的。嗯。。。因此,从视图中使用SELECT a AS b并不是为视图的列提供显式名称,而是为结果集的列提供显式名称
SELECT * FROM MyView; -- returns result with columns a, b, c, d, e, f