2010-08-26 5 views
0

J'essaie d'écrire une requête pour tirer toutes les lignes qui contiennent un nom d'utilisateur d'une grande liste de noms d'utilisateurs dans un champ. Par exemple, la table contient une colonne appelée 'Worklog' qui contient les commentaires faits par les utilisateurs et leur nom d'utilisateur. J'ai besoin de rechercher ce champ pour tous les noms d'utilisateur qui sont contenus dans une liste que j'ai.Les résultats de requête MySQL utilisés dans LIKE

J'ai essayé plusieurs choses mais je n'arrive pas à faire quoi que ce soit. Jusqu'à présent, c'est un peu ce que j'ai essayé:

SELECT * 
FROM `JULY2010` 
WHERE `WorkLog` 
IN (
    SELECT CONCAT('%', `UserName` , '%') 
    FROM `OpsAnalyst` 
) 

Le problème est que je besoin d'utiliser COMME parce qu'il est à la recherche d'une grande quantité de texte, mais je aussi une grande liste qu'il tire de, et cette liste doit être dynamique parce que les gens qui travaillent ici changent fréquemment. Des idées?

+0

Pourquoi avez-vous besoin d'utiliser comme? Vous ne pouvez pas vous joindre aux deux tables? – Tim

+0

regardez cette réponse. meybe regexp vous aider http://stackoverflow.com/questions/1127088/mysql-like-in –

+0

@Tim Je n'ai rien à quoi je puisse vraiment rejoindre les tables. Pas de colonnes communes. Peut-être ai-je mal compris votre réponse? Je suis un peu nouveau sur SQL et tout ce que j'ai essayé jusqu'ici a été de ce que j'ai trouvé en cherchant Google pour les personnes ayant des problèmes similaires. – mitchellwright

Répondre

0
SELECT * 
FROM `JULY2010` 
WHERE `WorkLog` REGEXP 
    (SELECT CONCAT(`UserName`, '|') 
    FROM `OpsAnalyst`) 
+0

Je reçois cette erreur lors de l'exécution de cette requête: # 1242 - La sous-requête renvoie plus d'une ligne – mitchellwright

0

I légèrement modifié cela et utilisé GROUP_CONCAT() et maintenant ma requête ressemble à ceci:

SELECT * 
FROM JULY2010 
WHERE `WorkLog` 
REGEXP (
    SELECT GROUP_CONCAT(`UserName` SEPARATOR '|') FROM `OpsAnalyst` 
) 

Je reçois maintenant un jeu de résultats, mais il semble que ce ne sont pas autant de résultats comme je devrais le faire. Je vais devoir examiner un peu plus pour savoir quel est le problème

Questions connexes