有时可以方便地返回表格中的所有数据以及您特别想要的数据。
SELECT *, name, age FROM users;
但是,首先获取您想要的数据会更方便,然后是剩下的数据。
SELECT name, age, * FROM users;
但是第二个SQL语句因语法错误而失败。
为什么会这样?
答案 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