所以我的数据库(Job Cards)中有一个表,它有一个名为'JobCardNum'的列。这是表的主键,但是由于特定的作业卡可能已被删除,因此存在间隙。
例如,可能存在编号为2000和2002的工作卡,但没有2001年。
我需要的是将JobCard编号作为输入,并在列按升序排列时查找下一个工作卡编号。
因此,如果'$ num'是我的清理输入,我需要像
这样的东西 "SELECT * FROM JobCards WHERE JobCardNum = $num ORDER BY 'JobCardNum' [asc]"
然后获得'下一个'JobCardNum。
我知道我可以返回所有JobCards的数组,然后提取我需要的那个,但可能有数千个条目,所以这似乎效率低下。
任何想法
答案 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"