昨天我做了一个非常简单的查询,但是今天早上我不记得我是怎么做的,而且无论我尝试了什么都行不通。
我想做一个简单的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 |
+------+-----------+--------------+-------+---------+---------+----------+
答案 0 :(得分:2)
将子选项放在括号中。 另外,我会给内部“测试”表一个别名(只是为了确定)
SET rdc_1ips =
(SELECT COUNT(*) FROM table1, TEST t2
WHERE table1.start between t2.txStart AND t2.txEnd)
但即使语法正确,我也不确定这是否有效。当从要更新的同一个表中进行选择时,MySQL有一些令人讨厌的限制。