2012-10-04 48 views
0

我越来越Truncated incorrect INTEGER value: 'D'警告,而我试图运行下面的查询:“截断不正确INTEGER值”错误

UPDATE MESSAGES 
SET status = CASE 
    WHEN 
    (from_id='111111111' AND status='A') THEN 'S' 
    WHEN 
    (to_id ='111111111' AND status='A') THEN 'R' 
    WHEN 
    ((from_id ='111111111' AND status='R') OR 
    (to_id ='111111111' AND status='S')) THEN 'D' 
    END 
WHERE primary_key = '236499681204' 
AND 
    (CASE 
    WHEN 
    (from_id='111111111' AND status='A') THEN 'S' 
    WHEN 
    (to_id ='111111111' AND status='A') THEN 'R' 
    WHEN 
    ((from_id ='111111111' AND status='R') OR 
    (to_id ='111111111' AND status='S')) THEN 'D' 
    END) is not null 

我看了帖子MySQL 'Truncated incorrect INTEGER value'MYSQL Truncated incorrect INTEGER value error。但他们不适用于我的情况。这里,statusVARCHAR(1)的类型。

有什么我失踪了吗?

编辑

这里的查询创建表:

CREATE TABLE `MESSAGES` (
    `primary_key` bigint(12) unsigned NOT NULL AUTO_INCREMENT, 
    `from_id` varchar(9) NOT NULL, 
    `to_id` varchar(9) NOT NULL, 
    `status` varchar(1) NOT NULL, 
    PRIMARY KEY (`primary_key`) 
) ENGINE=MyISAM AUTO_INCREMENT=123456789876 DEFAULT CHARSET=latin1 

请帮助:(

+0

您好再次:)。你是如何定义'primary_key'字段的? – Parado

+4

请显示您的表格定义 –

+1

'MySQL!= SQL' – NullUserException

回答

4

这是不是因为status但由于比较

(CASE 
    WHEN 
    (from_id='111111111' AND status='A') THEN 'S' 
    WHEN 
    (to_id ='111111111' AND status='A') THEN 'R' 
    WHEN 
    ((from_id ='111111111' AND status='R') OR 
    (to_id ='111111111' AND status='S')) THEN 'D' 
END) is not null 

避免错误,投CASE结果为CHAR这样的:

CAST((CASE 
    WHEN 
    (from_id='111111111' AND status='A') THEN 'S' 
    WHEN 
    (to_id ='111111111' AND status='A') THEN 'R' 
    WHEN 
    ((from_id ='111111111' AND status='R') OR 
    (to_id ='111111111' AND status='S')) THEN 'D' 
END) AS CHAR) is not null 

现在它应该工作正常:)

相关问题