0
votes

Requête SQL dans laquelle la clause WHERE utilise LIKE sur toutes les données d'une colonne d'une autre table

Azure SQL Server 2017:

Nous avons une table appelée dbo.keywords avec une colonne, appelée mots-clés . Cette colonne se compose d'environ 10 000 entrées varchar (50) .

Nous avons une autre table appelée dbo.articles . Les deux tables sont dans la même base de données.

La requête que nous essayons de créer serait la suivante:

SELECT * FROM dbo.articles
WHERE TextValue LIKE 
(**any of the 10,000 values of the keywords column in the dbo.keywords table**).

La partie entre parenthèses ci-dessus est la partie que je ne suis pas clair sur l'accomplissement. Sinon pour la partie LIKE , je suppose que je pourrais utiliser une sous-requête SELECT , mais la partie LIKE est ce qui me lance.


9 commentaires

De quoi s'agit-il LIKE que vous ne comprenez pas? Avez-vous jeté un œil à documentation , qui explique comment utiliser les caractères génériques? Si vous ne comprenez pas comment une fonction ou un opérateur fonctionne dans SQL Server, la documentation doit être l'un de vos premiers ports d'appel. La documentation a été considérablement améliorée au cours des dernières années (à mon avis) et peut désormais être éditée via la communauté sur GitHub; apporter des améliorations et des corrections beaucoup plus courantes et précises,


Double possible de Sélectionnez des éléments comme des enregistrements d'une colonne dans une autre table


Cherchez-vous cette requête? SELECT * FROM dbo.articles [AR] INNER JOIN dbo.keywords [KW] ON [AR] .TextValue LIKE '%' + [KW] .keywords + '%';


@Arulkumar ressemble à une réponse au lieu d'un commentaire


ce serait une réponse incorrecte. Je voulais probablement ON pas WHERE


Pas si sûr que @MartinSmith. Je pense que EXISTS sera un meilleur candidat ici.


@MartinSmith Merci, j'ai corrigé


Je parle simplement de la syntaxe invalide dans le commentaire ci-dessus - bien qu'elle ait maintenant été corrigée.


@Lamak Oui, j'ai posté comme réponse.


3 Réponses :


1
votes

Vous pouvez y parvenir en utilisant JOIN avec LIKE .

Pourriez-vous essayer la requête ci-dessous:

SELECT * 
FROM dbo.articles [AR] 
INNER JOIN dbo.keywords [KW] ON [AR].TextValue LIKE '%' + [KW].keywords + '%';


1 commentaires

C'est presque la même chose que la réponse @Larnu, mais depuis qu'ils ont posté le premier, j'ai marqué le leur comme réponse. Merci pour votre contribution.



1
votes

Vous voudrez joindre les tables et utiliser la clause LIKE dans la condition de jointure:

SELECT DISTINCT a.* FROM dbo.articles a
JOIN dbo.keywords k ON a.TextValue LIKE '%' + k.keywords + '%';


0 commentaires

2
votes

Je soupçonne que ce sera l'option la plus "performante" (j'utilise des guillemets, car l'utilisation de LIKE avec un caractère générique en tête rendra la requête non SARGable):

SELECT *
FROM dbo.articles a
WHERE EXISTS (SELECT 1
              FROM dbo.keywords k
              WHERE a.TextValue LIKE '%' + k.keyword + '%');


1 commentaires

C'est la bonne. Merci.