2010-03-05 4 views
2

J'essaie de sélectionner des données de deux tables et de les insérer dans une autre. Je veux sélectionner les données lorsque certaines choses correspondent dans chaque tableau. Le problème est que l'une des comparaisons doit être semblable et je suis à court de ressources. La déclaration SQL est ci-dessous et je crois que cela va au moins montrer ce que j'essaie de faire. J'ai essayé d'utiliser des procédures mais je ne peux pas comprendre cela ou même dire si cela aiderait.MySql Recherche de deux tables et comparaison de colonnes avec like et%

+0

Cela ressemble à un début raisonnable. Nous aurons besoin d'autres exemples de données sur lesquelles vous travaillez, de ce que vous attendez et de ce que vous obtenez réellement, afin de pouvoir vous aider. –

Répondre

5

Tout d'abord, assurez-vous que le SELECT retourne ce que vous voulez avant de tenter l'insertion. Ceci:

SELECT DISTINCT 
     u.user_id, 
     t.num 
    FROM temp t, users u 
WHERE t.name like '%' + u.l_name + '%' 

... utilise la syntaxe ANSI-89 JOIN. La syntaxe de jointure ANSI-92 est un meilleur choix:

SELECT DISTINCT 
     u.user_id, 
     t.num 
    FROM USERS u 
    JOIN TEMP t ON t.name LIKE CONCAT('%', u.l_name ,'%') 

... mais le critère de jointure semble défectueux. Il va lier des lignes où le nom de famille apparaît dans la valeur t.name, conduisant au problème de Smith: Si le nom de famille est "Smith", toutes les lignes seront reliées - même si les noms sont John, Jim, etc

+0

Un mot d'avertissement, 'LIKE CONCAT ('%', u.l_name, '%')' donnera des résultats inattendus si 'u.l_name' contient des caractères spéciaux tels que'% 'ou' _' – Martin

0

Essayez ceci:

INSERT INTO hr_numbers(`user_id`, `hr_number`) 
SELECT DISTINCT U.user_id, T.num 
FROM temp T 
INNER JOIN users U ON T.NAME LIKE '%' + U.l_name + '%' 
Questions connexes