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错误。

#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

问题出在哪里?谢谢。

4

2 回答 2

3

(假设这个代码片段是一个完整的查询)

可能是错误的,但您的语句没有 SELECT ... 简而言之,它看起来像这样:

t1 加入 t2 在哪里...

没有 SELECT something FROM t1 JOIN t2 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 而不是 *,具体取决于您的目标...

于 2012-05-14T07:37:20.340 回答
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)。当您尝试将其作为子查询包含在更大的查询中时,这会导致冲突。

于 2012-05-14T07:43:57.707 回答