这个简单的查询出了什么问题?

时间:2011-09-04 08:09:36

标签: mysql select count

昨天我做了一个非常简单的查询,但是今天早上我不记得我是怎么做的,而且无论我尝试了什么都行不通。

我想做一个简单的SELECT COUNT(*),然后更新表TEST。我们希望列起始的多少个值(table1)介于列txStart和列txEnd(来自表TEST)中的值之间。

SELECT COUNT(*)效果很好。

mysql> SELECT COUNT(*) FROM table1, TEST where table1.start BETWEEN TEST.txStart AND TEST.txEnd;
+----------+
| COUNT(*) |
+----------+
|    95149 |
+----------+
1 row in set (0.03 sec)    

UPDATE从未发生过。

 mysql> UPDATE TEST 
       SET rdc_1ips =  
       SELECT COUNT(*) FROM table1, TEST WHERE table1.start between TEST.txStart AND TEST.txEnd;
  

错误1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'SELECT COUNT(*)FROM table1,TEST WHERE table1.start在TEST.txStart A'第1行附近使用正确的语法

这是table1和表TEST

的预览
mysql> SELECT * from table1 limit 2;
+----+--------+------+---------+---------+------+-------+
| id | strand | chr  | start   | end     | name | name2 |
+----+--------+------+---------+---------+------+-------+
|  1 | -      | 1    | 2999997 | 3000096 | NULL | NULL  |
|  2 | +      | 1    | 2999998 | 3000097 | NULL | NULL  |
+----+--------+------+---------+---------+------+-------+


mysql> SELECT * FROM TEST;
+------+-----------+--------------+-------+---------+---------+----------+
| chr  | pos_start | name         | name2 | txStart | txEnd   | rdc_1ips |
+------+-----------+--------------+-------+---------+---------+----------+
| 1    |   3204575 | NM_001011874 | Xkr4  | 3204562 | 3661579 |        0 |
+------+-----------+--------------+-------+---------+---------+----------+

1 个答案:

答案 0 :(得分:2)

将子选项放在括号中。 另外,我会给内部“测试”表一个别名(只是为了确定)

SET rdc_1ips = 
   (SELECT COUNT(*) FROM table1, TEST t2 
    WHERE table1.start between t2.txStart AND t2.txEnd)

但即使语法正确,我也不确定这是否有效。当从要更新的同一个表中进行选择时,MySQL有一些令人讨厌的限制。