为什么MySQL LEFT JOIN不会返回所有行,除非有WHERE子句 - phpMyAdmin问题

Tim*_*lee 9 mysql sql phpmyadmin

考虑以下:

eventTypes表有163行.

事件有43,000行.

SELECT events.eventTypeID, eventTypes.eventTypeName 
FROM events 
LEFT JOIN eventTypes ON events.eventTypeID = eventTypes.eventTypeID
Run Code Online (Sandbox Code Playgroud)

这将返回163行.但是,如果我添加"WHERE events.eventID> = 0"

SELECT events.eventTypeID, eventTypes.eventTypeName 
FROM events 
LEFT JOIN eventTypes ON events.eventTypeID = eventTypes.eventTypeID 
WHERE events.eventID >= 0
Run Code Online (Sandbox Code Playgroud)

我得到了所有43,000行.我希望缺少一个WHERE子句会给我一切.我在想这个错吗?

更新:我刚在另一台服务器上尝试了这个并且结果相同.我复制并粘贴的确切查询是:

SELECT events.eventTypeID, eventTypes.eventTypeName FROM events LEFT JOIN eventTypes ON events.eventTypeID = eventTypes.eventTypeID
Run Code Online (Sandbox Code Playgroud)

这只返回前163条记录.MySQL版本是5.5.29和5.1.61.我查看了错误列表但没有发现任何内容.

更新#2:EXPLAIN使用任一查询提供相同的输出(即有或没有WHERE 1 = 1)

mysql> EXPLAIN(SELECT events.eventTypeID, eventTypes.eventTypeName FROM events LEFT JOIN eventTypes ON events.eventTypeID = eventTypes.eventTypeID);
+----+-------------+------------+--------+---------------+-------------+---------+-------------------------------+-------+-------------+
| id | select_type | table      | type   | possible_keys | key         | key_len | ref                           | rows  | Extra       |
+----+-------------+------------+--------+---------------+-------------+---------+-------------------------------+-------+-------------+
|  1 | SIMPLE      | events     | index  | NULL          | eventTypeID | 4       | NULL                          | 37748 | Using index |
|  1 | SIMPLE      | eventTypes | eq_ref | PRIMARY       | PRIMARY     | 4       | casefriend.events.eventTypeID |     1 |             |
+----+-------------+------------+--------+---------------+-------------+---------+-------------------------------+-------+-------------+
Run Code Online (Sandbox Code Playgroud)

更新#3在第三个系统上进行测试会产生我期望的结果,尽管我不知道为什么.第三个系统是运行MySQL 5.1.69的另一个CentOS6.我从我的开发系统导入了确切的转储,我将其导入第二个测试系统,但没有产生正确的结果.

更新#4发现问题.这不是MySQL问题.这是一个phpMyAdmin问题.使用mysql客户端在命令行上进行测试时,我会在所有系统上获得正确的结果.

Jim*_*son 1

我在 SqlFiddle 尝试过:http://sqlfiddle.com/#!2/c9908b/ 1

create table event (id int,type_id int);
create table type (type_id int, type_name varchar(30));

insert into type values(1, 'type 1');
insert into type values(2, 'type 2');
insert into type values(3, 'type 3');
insert into type values(4, 'type 4');
insert into type values(5, 'type 5');

insert into event values( 1,1);
insert into event values( 2,1);
insert into event values( 3,1);
insert into event values( 4,1);
insert into event values( 5,2);
insert into event values( 6,2);
insert into event values( 7,2);
insert into event values( 8,2);
insert into event values( 9,3);
insert into event values(10,3);
insert into event values(11,3);
insert into event values(12,3);
insert into event values(13,4);
insert into event values(14,4);
insert into event values(15,4);
insert into event values(16,4);
insert into event values(17,5);
insert into event values(18,5);
insert into event values(19,5);
insert into event values(20,5);

select event.id, type.type_name from event left join type
on event.type_id=type.type_id
Run Code Online (Sandbox Code Playgroud)

我按预期返回 20 行