2012-05-14 78 views
1
(SELECT * FROM table1 
INNER JOIN table2 
ON table1.id = table2.id) 
AS t1 
JOIN (SELECT ROUND(RAND() * (SELECT MAX(table1.id) FROM table1)) AS id) 
AS t2 
WHERE t1.id >= t2.id 
LIMIT 1) 

我嘗試使用RAND()max(id)獲得一個隨機的MySQL結果,卻得到了一個#1064錯誤。MySQL的內部連接隨機語法錯誤

#1064 - 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 'AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(table1.id) FROM table1))' at line 1

問題出在哪裏?謝謝。

+2

這是整個查詢? –

回答

3

(假設此代碼段是一個完整的查詢)

可能是錯的,但你的聲明沒有一個SELECT ...總之它看起來像這樣:

T1 T2 JOIN WHERE .. 。

沒有選擇一些東西從T1 T2 JOIN WHERE ...

不知道我說清楚了......

增編:

不知道你想要實現什麼,但是這段代碼從你的表中返回隨機ID(查詢的變體),所以也許你可以使用它。也許有點凌亂,但我不知道你想達到什麼:)。

SELECT * FROM 
    (SELECT table1.id as id1 
    FROM table1 
    INNER JOIN table2 
    ON table1.id = table2.id) as t1 
JOIN (
    (SELECT ROUND(RAND() * (SELECT MAX(table1.id) FROM table1)) AS id2) 
AS t2) 
WHERE t1.id1 >= t2.id2 
LIMIT 1 

您可以選擇ID1或ID2而不是*的,這取決於你有什麼目標?

+0

謝謝,但問題不在於't1 left join t2' – cj333

+1

問題是解析器無法識別它應該做什麼,因爲在語句的開頭沒有SELECT - 第一個括號中的SELECT被視爲sub查詢。 – RandomWhiteTrash

+0

請檢查我的編輯。 – RandomWhiteTrash

0

(假設此代碼段是一個更大的查詢的一部分)

的問題是此子查詢:

(SELECT * FROM table1 
INNER JOIN table2 
ON table1.id = table2.id) 
AS t1 

運行它獨自:

SELECT * FROM table1 
    INNER JOIN table2 
    ON table1.id = table2.id ; 

將不會發生錯誤,但會顯示/返回至少2個同名的列(id)。當您試圖將其作爲子查詢包含在更大的查詢中時,會導致衝突。