以下查询返回1行:
SELECT `coach_id` FROM `table_a` WHERE `coach_id` = 8
UNION ALL
SELECT `coach_id` FROM `table_b` WHERE `coach_id` = 8
但SELECT coach_id FROM table_b WHERE coach_id = 8
返回2行。
SELECT coach_id FROM table_a WHERE coach_id = 8
返回1行。
我正在使用UNION ALL
来避免DISTINCT
过滤,因为我实际上只对总行数感兴趣。它似乎表现得像常规UNION
a.k.a UNION DISTINCT
。
这是怎么回事?查询在MariaDB 4.5.2
服务器上的phpMyAdmin 10.1.9
接口中执行。
我刚刚发现mysql命令行客户端的行为与预期的一样。因此,失败必须位于nginx 1.8.0
,PHP 5.6.16
mysqli
和phpmyadmin
的堆栈中。
当我从php脚本运行查询(使用mysqli)时,它也正确返回3行。我想除了phpMyAdmin之外什么都不会导致这种现象。感谢您的帮助到目前为止,对不起,这个问题一直存在误导。我不知道更好......
答案 0 :(得分:1)
这是一个phpMyAdmin错误,已在v4.5.3.0(2015-12-23)中修复。
答案 1 :(得分:0)
create schema testThenDrop123;
use testThenDrop123; -- use that database
create table table_a
( id int auto_increment primary key,
coach_id int not null
);
create table table_b
( id int auto_increment primary key,
coach_id int not null
);
insert table_a (coach_id) values (8);
insert table_b (coach_id) values (8),(8);
SELECT `coach_id` FROM `table_a` WHERE `coach_id` = 8
UNION ALL
SELECT `coach_id` FROM `table_b` WHERE `coach_id` = 8;
+----------+
| coach_id |
+----------+
| 8 |
| 8 |
| 8 |
+----------+
drop schema testThenDrop123; -- cleanup by dropping db
所以我看不到你在看什么。
答案 2 :(得分:0)
你有可能有脏数据吗?使用ID的空格或其他字符?在查询中使用LENGTH(coach_id),coach_id。然后,如果它不止一个字符,它将不会返回那些行,但你会知道原因。