Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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 在select语句的项目列表中使用“*”,例如select*vs.select*,a vs.select a*_Mysql_Sql - Fatal编程技术网

Mysql 在select语句的项目列表中使用“*”,例如select*vs.select*,a vs.select a*

Mysql 在select语句的项目列表中使用“*”,例如select*vs.select*,a vs.select a*,mysql,sql,Mysql,Sql,我想知道MySQL在SELECT语句的字段列表中使用“*”的原因可能是什么 报告说: select_expr术语列表包括指示以下内容的select列表: 要检索的列。术语指定列、表达式或can 使用*-速记: 仅由单个不合格*组成的选择列表可用作 速记,从所有表中选择所有列 从t1内部连接t2中选择* 在字段列表中“*”只能使用一次似乎很严格,一旦它被使用,就不应该有其他任何内容。它还符合SQL 1999标准,可能也符合SQL 2011标准: <select list> ::= &

我想知道MySQL在SELECT语句的字段列表中使用“*”的原因可能是什么

报告说:

select_expr术语列表包括指示以下内容的select列表: 要检索的列。术语指定列、表达式或can 使用*-速记:

仅由单个不合格*组成的选择列表可用作 速记,从所有表中选择所有列

从t1内部连接t2中选择*

在字段列表中“*”只能使用一次似乎很严格,一旦它被使用,就不应该有其他任何内容。它还符合SQL 1999标准,可能也符合SQL 2011标准:

<select list> ::=
<asterisk>
| <select sublist> [ { <comma> <select sublist> }... ]
。。。而且这个实现更加宽松!!例如,它允许执行以下查询:

SELECT *, a FROM t
但是,它不允许执行以下查询:

SELECT a,* FROM t
SELECT *,* FROM t

有人举了一个例子吗?这个标准的MySQL扩展的原因可能是什么?

MySQL解析器似乎会部分解析和验证查询,然后基本上会忽略结果集的SELECT*之后但FROM之前的任何内容

注意,从myTable中选择*,id;只有一个输出列。从myTable;中选择*、id、id、id也是如此;。这几乎就像查询引擎得到一个列的不同列表,并从那里开始。MySQL一般都会这样做;假设用户想要什么。大多数其他RDBMS将抛出错误,而不是以确定性的方式完全执行用户指定的操作


在任何情况下,没有任何RDBMS严格按照任何ANSI SQL实现SQL。这太难了,也太不切实际了。

其他sql实现允许使用,*表单。MySql允许*,a。我不明白你的问题。从我的表格中选择*,一个字段作为另一个字段什么是有意义的?它们是两个特定于供应商的实现,对我来说都是有意义的。我同意,“有意义”在这个问题上可能是模糊的。。。所以MySQL允许*,a,标准只允许*。我认为使用*的一个原因可能是Matteo提出的示例,即在结果集中使用一个字段或某个表达式,例如a+b别名。但这并不能解释为什么,*是不允许的。所以我想这里可能还有别的东西。。。e、 如果我尝试选择*,结果集中会包含myTable id+1中的id+1,因此MySQL不会真正忽略其中的任何内容,但我认为我理解并同意MySQL似乎“对用户想要什么做假设”
SELECT a,* FROM t
SELECT *,* FROM t