我一直在尝试获取特定产品的最新序列号,以便我可以在管理区域显示下一个可用的序列号。
以下是我一直在尝试的事情
MySQL 5.5.32架构设置:
CREATE TABLE IF NOT EXISTS `serials` (
`sn` varchar(11) NOT NULL,
`cxid` varchar(11) DEFAULT NULL,
`itmid` varchar(11) DEFAULT NULL,
PRIMARY KEY (`sn`)
);
INSERT INTO `serials` (`sn`, `cxid`, `itmid`) VALUES
('7', '00007', 'Name'),
('8', '00008', 'Name'),
('9', '00010', 'Name'),
('10', '00010', 'Name'),
('11', '00010', 'Name'),
('12', '00012', 'Name'),
('13', '00013', 'Name');
查询1 :
SELECT
sn
FROM serials AS t
INNER JOIN (SELECT MAX(sn) AS one FROM serials where cxid = '00010') AS s ON s.one = t.sn
Results :
无论我做什么,我总是得到一个空洞的结果。可能是什么问题?也许有一种更简单的方法?
需要注意的是,我必须仅获取特定产品的序列号,而不是整个表格。
答案 0 :(得分:1)
您使用的是正确的字段吗? itmid = 0010
?不应该是cxid
吗?
您也没有与0010
匹配的值。您应该使用'00010'
。当您使用varchar数据类型时,我相当肯定0010
将不等于00010
,您应该将其包装在引号中以将其作为字符串进行评估。
最后,sn
来自它的外观应该是整数类型。没有它是一个整数,MAX()不会正常工作。如果你确定需要它作为varchar,你可以使用ABS,有一个解决方法:
SELECT MAX(ABS(sn)) AS one FROM serials where cxid = '00010'
答案 1 :(得分:1)
你使用的是错误的字段。
使用此功能:
SELECT sn FROM serials AS t INNER JOIN (SELECT MAX(sn) AS one FROM serials where cxid = '00010') AS s ON s.one = t.sn
您应该使用'00010'
代替'0010'
。因为您没有与0010
匹配的值。