什么是phpMyAdmin对我的UNION ALL查询做什么?

时间:2015-12-13 02:58:44

标签: sql phpmyadmin union

以下查询返回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.0PHP 5.6.16 mysqliphpmyadmin的堆栈中。

更新2

当我从php脚本运行查询(使用mysqli)时,它也正确返回3行。我想除了phpMyAdmin之外什么都不会导致这种现象。感谢您的帮助到目前为止,对不起,这个问题一直存在误导。我不知道更好......

3 个答案:

答案 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。然后,如果它不止一个字符,它将不会返回那些行,但你会知道原因。