我试图跳过我的SQL查询中的第一行和最后一行(即在这种情况下跳过sequence=0
和sequence=4
)但我的SQL查询似乎没有工作。知道为什么吗?逻辑似乎是正确的:
SELECT * FROM waypoint
WHERE id NOT IN(
(SELECT MIN(ID) FROM waypoint),
(SELECT MAX(ID) FROM waypoint)
)
AND booking_id="1";
答案 0 :(得分:1)
你有7行。他们的id是1到7.你的not in
子句过滤掉1和7.如果你想先用booking_id=1
跳过,你应该将这个子句添加到子选择中:
SELECT * FROM waypoint
WHERE id NOT IN(
(SELECT MIN(ID) FROM waypoint where booking_id="1"),
(SELECT MAX(ID) FROM waypoint where booking_id="1")
)
AND booking_id="1";
答案 1 :(得分:0)
您需要将where
子句的第二部分复制到not in
子句的选择中,因为每个select
都是自己处理的,并且可以访问整个数据集。因此,您需要为每个select
添加限制逻辑。否则,MAX(ID)
将返回7,因为它可以访问整个数据集:
SELECT * FROM waypoint
WHERE id NOT IN(
(SELECT MIN(ID) FROM waypoint where booking_id="1"),
(SELECT MAX(ID) FROM waypoint where booking_id="1")
)
AND booking_id="1";
答案 2 :(得分:0)
我不知道它是否有效,我暂时无法在此测试,但你试过了吗
SELECT * FROM waypoint WHERE booking_id="1" ORDER BY ID LIMIT 2,COUNT(ID)
这可能更有效,因为你不需要两个子选择。