2010-06-24 9 views
1

J'essaie d'effectuer une requête pour filtrer les lignes d'une table, puis de joindre les résultats sur une autre table, puis de filtrer des lignes supplémentaires.Sous-requête sur une jointure

Voici la requête que j'ai écrit:

SELECT * 
    FROM (SELECT media.id AS id2, media.flagged AS flagged2, media.item_status AS status2 
      FROM media 
     WHERE flagged2 != 'nsfw' 
      AND status2 != 'deleted' 
    ORDER BY id2 DESC LIMIT 0,5) 
    JOIN media on info.mid = media.id 
WHERE info.topic = 'food_drink' 
    OR info.topic='cooking' 
GROUP BY info.mid 

Je pense que je suis assez proche pour obtenir la requête de travail, mais je continue à faire passer le message, « Chaque table dérivée doit avoir son propre alias. » J'ai googlé ceci et de ce que j'ai lu j'ai besoin d'alias des parties de la sous-requête que j'ai essayées mais je ne peux toujours pas le faire fonctionner.

+0

juste une question rapide ... où avez-vous obtenu le "info"? est-ce un alias ou une table? – hallie

+0

@hallie: Étant donné qu'Eric n'a pas utilisé d'alias de table, je crois que c'est une table. Eric va devoir nous faire savoir si les références à 'INFO' devraient être dans cette requête, sinon comment elles se rapportent à la table dérivée ... –

+0

Je suppose que ... JOIGNEZ le média sur info.mid = media.id. .. devrait en fait être ... JOIN ** info ** sur info.mid = media.id ... –

Répondre

3

Utilisation:

SELECT * 
    FROM (SELECT media.id AS id2, media.flagged AS flagged2, media.item_status AS status2 
      FROM media 
     WHERE flagged2 != 'nsfw' 
      AND status2 != 'deleted' 
     ORDER BY id2 DESC LIMIT 0, 5) x 
    JOIN media on info.mid = media.id 
WHERE info.topic = 'food_drink' 
    OR info.topic='cooking' 
GROUP BY info.mid 

Voir la x, juste à l'extérieur du support, mais avant que la jointure? C'est l'erreur. Le contenu à l'intérieur des parenthèses après FROM et before JOIN est une table dérivée (AKA inline view), et MySQL exige que vous spécifiiez un alias de table pour cela. Ensuite, lorsque vous référencez des colonnes de l'intérieur, vous utiliserez x.id2/etc.

+0

Ah c'est logique. Je pensais que la partie que j'avais à alias était dans la sous-requête. Il suffit de réécrire la requête en fonction de votre entrée et ça fonctionne parfaitement! – Eric

Questions connexes