首页 > 为什么这条语句查询结果会显示不全?

为什么这条语句查询结果会显示不全?

mysql> SELECT DISTINCT username,password,email FROM t_u_e_p_csdn_net WHERE username LIKE 'sbboy' OR email LIKE 'sbboy@%';

+----------+----------+-------------------+
| username | password | email             |
+----------+----------+-------------------+
 |sbboy    | 19890101 | sbsqqboy@163.com
+----------+----------+-------------------+
1 row in set (0.00 sec)

mysql> SELECT DISTINCT username,email,password FROM t_u_e_p_csdn_net WHERE username LIKE 'sbboy' OR email LIKE 'sbboy@%';

+----------+-------------------+----------+
| username | email             | password |
+----------+-------------------+----------+
 | 19890101 |sbsqqboy@163.com
+----------+-------------------+----------+
1 row in set (0.00 sec)

补充个表结构。。


  t_u_e_p_csdn_net | CREATE TABLE `t_u_e_p_csdn_net` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) NOT NULL DEFAULT '',
  `email` varchar(32) NOT NULL DEFAULT '',
  `password` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `email` (`email`),
  KEY `username` (`username`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=12599950 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC

只是交换了一下password的位置,为何这两次查询的结果会是这个样子?

再次补充,不用DISTINCT也是这样的

mysql> SELECT username,password,email FROM t_u_e_p_csdn_net WHERE username LIKE
'sbboy' OR email LIKE 'sbboy@%';
+----------+----------+-------------------+
| username | password | email             |
+----------+----------+-------------------+
 |sbboy    | 19890101 | sbsqqboy@163.com
+----------+----------+-------------------+
1 row in set (0.00 sec)

mysql> SELECT username,email,password FROM t_u_e_p_csdn_net WHERE username LIKE
'sbboy' OR email LIKE 'sbboy@%';
+----------+-------------------+----------+
| username | email             | password |
+----------+-------------------+----------+
 | 19890101 |sbsqqboy@163.com
+----------+-------------------+----------+
1 row in set (0.00 sec)

--------------------------------------------------------
    再次补充 ,username  = 也没用 
    mysql> SELECT DISTINCT username,email,password FROM t_u_e_p_csdn_net WHERE usern
ame = 'sbboy' OR email LIKE 'sbboy@%';
+----------+-------------------+----------+
| username | email             | password |
+----------+-------------------+----------+
 | 19890101 |sbsqqboy@163.com
+----------+-------------------+----------+
1 row in set (0.01 sec)

mysql> SELECT username,email,password FROM t_u_e_p_csdn_net WHERE username = 'sb
boy' OR email LIKE 'sbboy@%';
+----------+-------------------+----------+
| username | email             | password |
+----------+-------------------+----------+
 | 19890101 |sbsqqboy@163.com
+----------+-------------------+----------+
1 row in set (0.00 sec)

我在想会不会是下面的问题导致的:

WHERE username LIKE 'sbboy' OR email LIKE 'sbboy@%';

username后都是固定值'sbboy'了,干嘛还like模糊匹配呢?直接用“=”

mysql> SELECT username,email,password FROM t_u_e_p_csdn_net WHERE username ='sbboy' OR email LIKE 'sbboy@%'\G;

以下是第2次编辑内容

==!,这个问题,我觉得可以先再放一放。我现在想说得是!!!你们用户表的的password字段,不加密?!还想重蹈csdn覆辙?!用户谁还敢用你们的业务啊!!!

以下是第3次编辑内容

不好意思,容我再次编辑下,刚刚我又无意看到了一点,你的表名是t_u_e_p_csdn_net,我错了你赢了!继续51cto or 博客园。

以下是第4次编辑内容

另外,我在SQL Fiddle里执行结果是正常的。
sql执行结果


或许可以看看distinct的更详细用法


password应该是关键字,所以导致这种问题吧

【热门文章】
【热门文章】