为什么`select *,table from table;`work但是`select column,* from table;`not not work

时间:2017-04-21 12:59:43

标签: mysql sql

有时可以方便地返回表格中的所有数据以及您特别想要的数据。

SELECT *, name, age FROM users;

但是,首先获取您想要的数据会更方便,然后是剩下的数据。

SELECT name, age, * FROM users;

但是第二个SQL语句因语法错误而失败。

为什么会这样?

2 个答案:

答案 0 :(得分:2)

我已经搜索了一下,我在SO上发现了总共3个与此问题相关的问题,或者提出了同样的问题。免责声明:我只是通过搜索评论中提供的Damien链接找到它们:"Use of an unqualified * with other items"

你得到了这些问题:

在上一个问题answer的评论中,我发现2007年的bug report链接已于2009年结束,并附有以下说明:

  

我已将http://dev.mysql.com/doc/refman/5.1/en/select.html更新为   反映行为:

     

仅包含单个不合格*的选择列表可用作   用于选择所有表中所有列的简写:

     

SELECT * FROM t1 INNER JOIN t2 ...

     

tbl_name。*可用作合格的速记来选择所有列   来自命名表:

     

SELECT t1。,t2。 FROM t1 INNER JOIN t2 ...

     

使用不合格的*与选择列表中的其他项目   产生解析错误。要避免此问题,请使用限定条件   tbl_name。*参考

     

SELECT AVG(得分),t1。* FROM t1 ...

由我提供的精彩集锦/大胆。我无法找到有关此行为的任何进一步解释,或者可能发生什么样的解析错误或将发生在哪里。

如果有人有时间可以通过挖掘MySQL或MariaDB(具有相同行为)源代码来解决这个问题,但是我没有看到有人发现真实回答这个问题。

答案 1 :(得分:0)

因为mysql的语法很宽松,但并不总是......

此外,如果你想编写一个有效的SQL查询,它应该是这样的:

byte[] bytes = new UTF8Encoding().GetBytes(Password);
byte[] hash = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(bytes);
string hashstring = BitConverter.ToString(hash);

或者在表和列上使用别名:

select col1, col2, users.* 
from users