2012-05-14 5 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) 

J'essaie d'utiliser RAND()max(id) pour obtenir un résultat mysql au hasard, mais obtenir une erreur #1064.mysql jointure interne erreur de syntaxe aléatoire

#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

Où est le problème? Merci.

+2

est-ce la question entière? –

Répondre

3

(en supposant que cet extrait de code est une requête entière)

peut-être tort, mais votre déclaration n'a pas SELECT ... En bref, il ressemble à ceci:

t1 t2 REJOIGNEZ OÙ .. .

Il n'y a pas quelque chose SELECT FROM t1 t2 REJOIGNEZ OÙ ...

Je ne sais pas si je me fais bien ...

Addendum:

Vous ne savez pas exactement ce que vous tentez d'obtenir, mais ce code ci-dessous renvoie des ID aléatoires de vos tables (variante de votre requête). Vous pouvez donc peut-être l'utiliser. Un peu brouillon peut-être mais là encore je n'ai aucune idée de ce que vous essayez d'accomplir :).

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 

Vous pouvez sélectionner ID1 ou ID2 au lieu de *, selon ce qui est votre objectif ...

+0

merci, mais le problème n'est pas dans 't1 gauche rejoindre t2' – cj333

+1

problème est que l'analyseur ne reconnaît pas ce qu'il est censé faire parce qu'il n'y a pas de SELECT au début d'une déclaration - SELECT dans la première parenthèse est traitée comme un sous question. – RandomWhiteTrash

+0

Vérifiez ma modification s'il vous plaît. – RandomWhiteTrash

0

(en supposant que cet extrait de code fait partie d'une plus grande requête)

Le problème est cette sous-requête:

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

Courir seul:

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

ne donnera pas d'erreur mais il affichera/retournera au moins 2 colonnes avec le même nom (id). Cela provoque le conflit lorsque vous essayez de l'inclure en tant que sous-requête dans une requête plus importante.