mysql 未知列

标签 mysql

我正在使用此查询

SELECT COUNT(DISTINCT to_number) AS errors FROM sent_txts
WHERE msg_link_id = 0 AND 
msg_sent_datetime BETWEEN '2010-08-09 07:00:00' AND '2010-09-07 11:59:59'
HAVING to_number IN(SELECT mobile FROM action_6_members WHERE mobile = to_number)

但是我越来越

Unknown column 'tada_prod.sent_txts.to_number' in 'where clause'

如果我注释掉查询就可以正常运行。

这是sent_txts表

CREATE TABLE `sent_txts` (
  `id` int(64) NOT NULL AUTO_INCREMENT,
  `msg_link_id` int(64) DEFAULT NULL,
  `msg_class` varchar(256) DEFAULT NULL,
  `msg_ref` varchar(256) DEFAULT NULL,
  `to_number` varchar(256) DEFAULT NULL,
  `msg_body` text,
  `waiting_for_reply` int(64) DEFAULT NULL,
  `status` varchar(256) DEFAULT NULL,
  `tada_error` int(64) DEFAULT NULL,
  `msg_sent_datetime` datetime DEFAULT NULL,
  `reply_type` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=256379 DEFAULT CHARSET=utf8

很明显该专栏就在那里。

问题是什么?

<小时/> 以下是 Jonathan

发布的查询的解释
id  select_type  table  type  possible_keys  key  key_len  ref  rows    Extra                           
1   SIMPLE       a      ALL                                     10895                                   
1   SIMPLE       s      ALL                                     256050  Using where; Using join buffer  

Here is the show create for action_6_members:

CREATE TABLE `action_6_members` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `draw_id` int(11) NOT NULL,
  `mobile` varchar(255) NOT NULL,
  `fly_buys` varchar(255) NOT NULL,
  `signup_date` datetime NOT NULL,
  `club` int(11) NOT NULL DEFAULT '0' COMMENT '1 = yes, 2 = no',
  `code` varchar(7) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10896 DEFAULT CHARSET=latin1

最佳答案

通常,HAVING 子句将聚合与值或另一个聚合相关联。问题的 HAVING 子句中的内容应该位于主 WHERE 子句中:

SELECT COUNT(DISTINCT to_number) AS errors
  FROM sent_txts AS s
 WHERE msg_link_id = 0
   AND msg_sent_datetime BETWEEN '2010-08-09 07:00:00'
                             AND '2010-09-07 11:59:59'
   AND to_number IN (SELECT mobile FROM action_6_members AS a
                      WHERE a.mobile = s.to_number)

但是你可能应该将其变成常规连接:

SELECT COUNT(DISTINCT s.to_number) AS errors
  FROM sent_txts AS s
  JOIN action_6_members AS a ON a.mobile = s.to_number
 WHERE s.msg_link_id = 0
   AND s.msg_sent_datetime BETWEEN '2010-08-09 07:00:00'
                               AND '2010-09-07 11:59:59';

关于mysql 未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3920077/

相关文章:

mysql - 冷聚变 10 ORM。如何使用 2 个多对多表自定义 EntityLoad 返回值?

mysql - Hadoop/Sqoop通信链接错误-无法从MySQL导入表

更改表修改列期间的mysql错误1062

java - 我的关于Mysql和JAVA的代码有什么问题

php - 文件无法保存在服务器中,怎么办?

MySQL触发器-插入前查询第三个表

PHP - 想要将 MySQL Timestamp 时间转换为 UTC +6 时间

php - 搜索字母数字字符串

MySQL CSV 一栏导出HTML代码

mysql - MySQL过程中的一个错误