2014-07-14 4 views
0

La requête suivante fonctionne (exemple requête ci-dessous)En utilisant le résultat SELECT subselect IN()

SELECT cat, dog, mouse, ids, 
    (SELECT cheese 
    FROM my_second_table AS a 
    WHERE a.ids IN (1,2,3,4,5,6,7,8,9,10) 
    LIMIT 1) AS cheese 
FROM my_first_table 

Il me redonne les 5 colonnes avec les données correctes que je pense, y compris la colonne de fromage.

La requête suivante ne fonctionne pas, la colonne de fromage est toujours vide

SELECT cat, dog, mouse, ids, 
    (SELECT cheese 
    FROM my_second_table AS a 
    WHERE a.ids IN (ids) 
    LIMIT 1) AS cheese 
FROM my_first_table 

ids contient les mêmes numéros séparés par des virgules comme dans la première requête ci-dessus, extraites de chaque ligne de la my_first_table. Je pense que cela devrait fonctionner et que je fais quelque chose de mal. Est-il acceptable d'utiliser les résultats SELECT dans une clause IN-Select IN()?

+0

Pouvez-vous donner comment stocker dans la valeur 'ids'? – Sadikhasan

+1

Je suppose que 'ids' est une valeur de chaîne unique. Ça ne marchera pas comme ça. –

+0

@dragoste Correct, pourquoi pas? C'est juste '1,2,3,4,5,6,7,8,9,10' – superphonic

Répondre

2

Essayez avec fonction FIND_IN_SET comme

SELECT cat, dog, mouse, ids, 
    (SELECT cheese 
    FROM my_second_table AS a 
    WHERE find_in_set(a.ids, ids) 
    LIMIT 1) AS cheese 
FROM my_first_table 

IN accepte une liste ou paramètres pour rechercher, FIND_IN_SET accepte un paramètre de chaîne contenant une liste séparée par des virgules.

Dans votre cas ids sont séparés par des virgules chaîne si find_in_set sera vrai et IN clause return false

+0

@superphonic avez essayé cette réponse? – Sadikhasan

+0

Eh oui, ça marche! Y a-t-il des inconvénients? Quelle est la différence de performance s'il y en a entre 'IN()' – superphonic

+0

Il n'y a aucune différence de performance et vérifiez http://stackoverflow.com/questions/15656740/why-find-in-set-works-but-in-clause pour référence – Sadikhasan