素材牛VIP会员
为什么这条语句查询结果会显示不全?
 pr***cy  分类:SQL代码  人气:696  回帖:3  发布于6年前 收藏

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)
 标签:mysql

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv5 码农
wa***ao 移动开发工程师 6年前#1

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

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执行结果

Lv3 码奴
ze***91 站长 6年前#2

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

Lv6 码匠
阿***灯 页面重构设计 6年前#3

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

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取