Requête SQL avec comme opérateur à partir de deux tables
Comment puis-je faire une requête SQL avec la like
de l'opérateur à partir de deux tables différentes?
J'ai besoin de quelque chose comme:
select * from table1 where name like %table2.name
Ce n'est pas un champ commun, mais une sous-chaîne d'un champ d'une autre table.
Le plus d'informations que vous incluez dans votre question, le mieux, les réponses seront. Cette question fournit très peu d'informations pour les gens à travailler.
Est-il SQL Server ou MySQL? Les deux? Votre question a été à l'origine uniquement tagged SQL Server.
c'est le serveur de sql...désolé!
Est-il SQL Server ou MySQL? Les deux? Votre question a été à l'origine uniquement tagged SQL Server.
c'est le serveur de sql...désolé!
OriginalL'auteur simone | 2010-01-21
Vous devez vous connecter pour publier un commentaire.
Modifier
(réponse originale à cette question est un peu plus bas)
Votre commentaire (et modifier) change complètement la question.
Pour ce faire, vous pouvez utiliser
LIKE
dans le cadre de laON
clause de jointure:(C'est la version de SQL Server; pour MySQL, ajouter dans les différents points-virgules, retirez le
GO
s, et l'utilisation...LIKE concat('%', b.bar)
à la place.)Qui utilise
id
= 2 pour trouverbar
= "ne" dans le tableaub
, puis ajoute le%
opérateur et l'utilise pour filtrer les résultats dea
. Les résultats sont les suivants:Vous n'aurez pas à faire la méthode concat si vous pouvez stocker l'opérateur dans
b.bar
.Séparément, j'ai été surpris de trouver que cela fonctionne (sur SQL Server):
...mais la version à l'aide
JOIN
est probablement plus souple.Qui devrait vous aller.
Réponse originale à cette question
(Sans doute le plus pertinent)
Il est difficile de dire ce que vous demandez, mais voici un exemple d'utilisation de
LIKE
afin de limiter les résultats à partir d'unJOIN
:Qui vous donnera
foo
desomeTable
etbar
desomeOtherTable
où les lignes sont liées parsomeField
etfoo
commence par "quelque CHOSE" etbar
se termine par "AUTRE CHOSE".OriginalL'auteur T.J. Crowder
Pas particulièrement sûr de la syntaxe précise, mais voici une idée:
F
, il devrait donc êtreR.F like
, pasR.Foo like
.Merci! Corrigé cela.
ce n'est pas ce que je veux dire!! je nedd quelque chose comme: select * from table1 where name like %de table2.nom
Voulez-vous être beaucoup mieux de mettre le filtre sur l'individu choisit? Vous êtes en train de créer un risque d'être énorme comme une union, et ensuite seulement de filtrage. Si vous filtre tout d'abord, la déclaration sera moins complexe (l'élimination d'un SELECT) et j'ai pense qu'il serait d'une exécution plus rapide:
SELECT ID, Foo as F FROM FooTable WHERE Foo LIKE '%text%' UNION ALL SELECT ID, Bar as F FROM BarTable WHERE Bar LIKE '%text'
Si oui, ce n'est pas de ma faute. Vous devez avoir été plus précis dans votre question initiale. GIGO dans toute sa splendeur 🙂
OriginalL'auteur Anton Gogolev
@TJCrowder réponse
Tables De Test
De la requête réelle
Modifier la requête ci-dessus que vous avez besoin comme
OriginalL'auteur Hammad Khan