(Đăng nhận xét của tôi như một câu trả lời vì dường như nó đã tạo ra sự khác biệt!)
Nếu ai đó muốn tìm hiểu thêm về vấn đề này, tôi vừa thực hiện một thử nghiệm và thấy nó rất dễ tái tạo.
Tạo bảng
CREATE TABLE `filler` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
Tạo thủ tục
CREATE PROCEDURE `prc_filler`(cnt INT)
BEGIN
DECLARE _cnt INT;
SET _cnt = 1;
WHILE _cnt <= cnt DO
INSERT
INTO filler
SELECT _cnt;
SET _cnt = _cnt + 1;
END WHILE;
END
Điền bảng
call prc_filler(5000)
Truy vấn 1
SELECT id
FROM filler
WHERE id = (SELECT MAX(id) FROM filler WHERE id =
( SELECT MIN(id)
FROM filler
WHERE id between 2000 and 3000
)
)
Đầu ra Giải thích Bình đẳng http://img689.imageshack.us/img689/5592/equals. png
Truy vấn 2 (cùng một vấn đề)
SELECT id
FROM filler
WHERE id in (SELECT MAX(id) FROM filler WHERE id in
( SELECT MIN(id)
FROM filler
WHERE id between 2000 and 3000
)
)
Trong Đầu ra Giải thích http://img291.imageshack.us/img291/8129/52037513. png