2011-09-04 57 views
0

昨天我做了一個非常簡單的查詢,但今天早上我不記得我是如何做到的,而且我嘗試過的任何操作都不起作用。這個簡單的查詢有什麼問題?

我想做一個簡單的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; 

ERROR 1064(42000):你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊正確的語法使用近「SELECT COUNT(*)FROM表1,測試,其中TEST.txStart A之間table1.start」在行1

這裏是一個預覽表1和表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

此外,如果你知道一種方式來查找在MySQL的過去查詢.....讓我知道〜! – madkitty

+0

如何使用括號'SET rdc_1ips =(SELECT COUNT(*)FROM table1,TEST WHERE table1.start TEST.txStart AND TEST.txEnd之間)? – Usman

+1

當您將SELECT放在括號中時它有幫助嗎? –

回答

2

將子選擇置於括號中。 另外我想給內部「測試」表的別名(只是要確定)

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

但我不知道這是否會工作,即使語法是正確的。當你從同一個表中選擇你想要更新時,MySQL有一些令人厭惡的限制。