2009-11-09 3 views
0

J'ai besoin d'écrire ce que je voudrais appeler une Valley Girl-requête. Je dois SELECT quelque chose qui est LIKE IN - quelque chose comme ceci:Pouvez-vous sélectionner O WH quelque chose est comme et IN en même temps?

SELECT * FROM Table1 OU nom comme IN (SELECT Nom DE Tableau2)

La raison est que j'ai une table plein de noms de sociétés, mais ils ne sont pas exactement les mêmes - par exemple. dans le tableau 1, on pourrait dire "groupe Chrysler", tandis que dans le tableau 2, il pourrait simplement dire "Chrysler".

Y a-t-il un moyen facile de le faire?

Répondre

2
select 
    * 
from 
    Table1 t1 
    inner join Table2 t2 on (t1.name like t2.name + '%') 

ou sans signe '%' si vous voulez :)

+0

C'est une requête ssslllooowww! MAIS cela a répondu à ma question. Malheureusement, les données obtenues n'étaient pas assez bonnes pour ce dont j'avais besoin, mais ce n'est pas vraiment mon problème. ;) –

+0

Vous devez utiliser une table de société et utiliser ses identifiants dans vos autres tables. Ce sera plus confortable de travailler avec et une grande accélération. – silent

+0

Le tableau 2 est en fait une table temporaire pour cette exportation ponctuelle que j'allais faire, ce qui n'est pas une bonne pratique. –

0

Je pense:

SELECT * FROM table1 WHERE EXISTS (SELECT Name FROM Table2 WHERE Table1.Name LIKE Name) 
+0

Vous devriez voir le plan d'exécution pour votre suggestion. – silent

+0

? Si vous allez faire ce genre de commentaire, vous devez expliquer * pourquoi * - je suis tout à fait disposé à apprendre (c'est pourquoi la réponse est préfixée "je pense:") et tout à fait disposé à supprimer la réponse ou modifier/annoter comme il convient mais un peu plus d'aide dans ce sens est d'abord souhaitable – Murph

+0

Un peu vieux, mais je m'ennuie: Le problème avec votre requête est que le WHERE EXISTS sera appelé une fois par ligne dans Table1. Comme WHERE EXISTS utilise également un opérateur LIKE, les performances seront probablement très médiocres. Compte tenu de la demande initiale, je pense que toute requête serait lente, alors ne prenez pas cela à cœur :) – Meff

1

est ici une façon que vous pouvez le faire:

SELECT t1.* 
FROM Table1 t1 
    JOIN Table2 t2 ON t1.Name LIKE t2.Name + '%' 
0

Si vous êtes en essayant de créer une liste de correspondances proches, la fonction SOUNDEX peut être utile en cas d'orthographe douteuse.

SELECT T1.* 
    FROM Table1 T1  
    JOIN Table2 T2 ON SOUNDEX(T1.Name) = SOUNDEX(T2.Name) 
Questions connexes