【问题标题】:"Truncated incorrect DOUBLE value" in MySQL [duplicate]MySQL中的“截断不正确的DOUBLE值” [重复]
【发布时间】:2017-11-02 03:26:54
【问题描述】:

尝试在查询下方运行,但显示错误:

截断不正确的 DOUBLE 值

谁能解释一下,我错过了什么?

SELECT exam_type_name
FROM exam_types 
WHERE exam_type_id IN (SELECT ids FROM exam WHERE id = 37);

上面的子查询返回字符串36,37,39,40

主表定义:

CREATE TABLE  `careerturn_db`.`exam_types` (
  `exam_type_id` int(11) NOT NULL AUTO_INCREMENT,
  `exam_type_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`exam_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=latin1;

子查询表定义:

CREATE TABLE  `careerturn_db`.`exam` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ids` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=latin1;

错误:

【问题讨论】:

  • 是的,这不是一个正确的 DOUBLE 值。你想达到什么目的?
  • 我正在尝试获取所有拥有36,37,39,40 id 的exam_type_name
  • id 列的类型是什么?您可以发布表定义吗?
  • 你的子查询没有意义:SELECT id FROM exam WHERE id = 37。 id 始终为 37。
  • exam_types 的定义呢?

标签: mysql subquery truncate


【解决方案1】:

您可以使用FIND_IN_SET 尝试以下操作:

SELECT exam_type_name
FROM exam_types e
WHERE FIND_IN_SET(exam_type_id, (SELECT ids FROM exam WHERE id = 37)) > 0;

原始查询的错误被抛出,因为您尝试在一个看起来像 DOUBLE 值的字符串中搜索一个整数值。但是 MySQL 无法将此值转换为具有多个 , 的 DOUBLE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多