2012-05-14 46 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)。当您试图将其作为子查询包含在更大的查询中时,会导致冲突。