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 JOIN t2WHERE..。

SELECT something FROM t1 JOIN t2WHERE..はありません。

私が自分自身を明確にするかどうかわからない...

補遺:

何を達成しようとしているのかわかりませんが、次のコードはテーブルからランダムな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 ; 

エラーは発生しませんが、同じ名前(id)の少なくとも2つの列が表示/返されます。これにより、より大きなクエリにサブクエリとして含めようとすると、競合が発生します。

于 2012-05-14T07:43:57.707 に答える