如何执行此查询

时间:2016-07-08 14:49:37

标签: mysql sql

所以我的数据库(Job Cards)中有一个表,它有一个名为'JobCardNum'的列。这是表的主键,但是由于特定的作业卡可能已被删除,因此存在间隙。

例如,可能存在编号为2000和2002的工作卡,但没有2001年。

我需要的是将JobCard编号作为输入,并在列按升序排列时查找下一个工作卡编号。

因此,如果'$ num'是我的清理输入,我需要像

这样的东西
 "SELECT * FROM JobCards WHERE JobCardNum = $num ORDER BY 'JobCardNum' [asc]"

然后获得'下一个'JobCardNum。

我知道我可以返回所有JobCards的数组,然后提取我需要的那个,但可能有数千个条目,所以这似乎效率低下。

任何想法

3 个答案:

答案 0 :(得分:2)

SELECT TOP 1 JobCardNum FROM JobCards WHERE JobCardNum > $num ORDER BY JobCardNum asc

MySQL的:

SELECT JobCardNum from someTable WHERE JobCardNum > $num ORDER BY JobCardNum  limit 1

答案 1 :(得分:1)

如果您只想要JobCardNum,那么这在所有SQL方言中都有效:

SELECT MIN(JobCardNum) AS JobCardNum
FROM JobCards
WHERE JobCardNum >= $num

对于MySQL,您可以使用它来获取所有列:

SELECT
    JobCardNum,
    SomeOtherColumn,
    ... <list the columns, never use SELECT *>
FROM
    JobCards
WHERE
    JobCardNum >= $num
LIMIT 1

如果您想使用ANSI SQL,而不是依赖于MySQL的LIMIT

SELECT
    JobCardNum,
    SomeOtherColumn,
    ... <list the columns, never use SELECT *>
FROM
    JobCards JC
WHERE
    JobCardNum = (SELECT MIN(JobCardNum) AS JobCardNum FROM JobCards WHERE JobCardNum >= $num)

答案 2 :(得分:1)

您可以说JobCardNum = $num应该大于或等于JobCardNum,而不是设置$num

"SELECT * FROM JobCards WHERE JobCardNum >= $num ORDER BY 'JobCardNum' asc"

这将返回$num至少JobCardNum的所有数据的列表。 由于您只想要一个结果,您可以将其限制为1:

"SELECT * FROM JobCards WHERE JobCardNum >= $num ORDER BY 'JobCardNum' asc LIMIT 1"