我昨天做了一个非常简单的查询,但今天早上我不记得我是怎么做的,而且我尝试的任何方法都不起作用。
我想做一个简单的SELECT COUNT(*)
,然后更新表TEST。我们想知道列 start (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)
更新
从未发生过。
mysql> UPDATE TEST
SET rdc_1ips =
SELECT COUNT(*) FROM table1, TEST WHERE table1.start between TEST.txStart AND TEST.txEnd;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT COUNT(*) FROM table1, TEST WHERE table1.start between TEST.txStart A' at line 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 |
+------+-----------+--------------+-------+---------+---------+----------+
最佳答案
将子选择放在括号中。 另外,我会给内部“测试”表一个别名(只是为了确定)
SET rdc_1ips =
(SELECT COUNT(*) FROM table1, TEST t2
WHERE table1.start between t2.txStart AND t2.txEnd)
但我不确定即使语法正确,这是否会起作用。当从要更新的同一个表中进行选择时,MySQL 有一些令人讨厌的限制。
关于mysql - 这个简单的查询有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7298034/