comment utiliser un comme avec une jointure sql?
J'ai 2 tables, disons tableau A et B et je veux effectuer une jointure, mais la condition de correspondance doit être là où une colonne à partir d'Un 'est comme" une colonne de B, ce qui signifie que tout peut venir avant ou après la colonne B:
par exemple: si la colonne de A est 'foo'. Puis la jointure correspond si la colonne B est soit: 'fooblah', 'somethingfooblah" ou simplement "foo". Je sais comment utiliser les caractères génériques dans un standard comme déclaration, mais je suis perplexe quand à faire une jointure. Est-il logique? Merci.
Vous devez vous connecter pour publier un commentaire.
À l'aide de INSTR:
En utilisant COMME:
En utilisant COMME, avec CONCAT:
L'esprit que toutes les options, vous aurez probablement envie de conduire les valeurs de la colonne en majuscules AVANT de les comparer afin de s'assurer que vous obtenez matches sans préoccupation pour le respect de la casse:
Le plus efficace dépendra en fin de compte sur le EXPLIQUER le plan de sortie.
JOIN
clauses sont identiques à l'écritureWHERE
clauses. LeJOIN
syntaxe est aussi appelé ANSI Rejoint parce qu'ils ont été normalisés. Non-ANSI Rejoint ressembler à:Je ne vais pas vous embêter avec un Non-ANSI LEFT JOIN exemple. L'avantage de la syntaxe de JOINTURE ANSI, c'est qu'il sépare ce qui est de la jointure de tables ensemble de ce qui se passe réellement dans le
WHERE
clause.Dans MySQL, vous pourriez essayer:
SELECT * FROM A INNER JOIN B ON B.MYCOL LIKE CONCAT('%', A.MYCOL, '%');
Bien sûr, ce serait une massivement requête inefficace car elle permettrait de faire un full table scan.
Mise à jour: Voici une preuve
Si c'est quelque chose que vous aurez besoin de le faire souvent...alors vous pouvez éliminer la relation entre les tables A et B.
Par exemple, lors de l'insertion de la table B, vous pouvez écrire de zéro, une ou plusieurs entrées à un juncion table de mappage de B d'Une fonction partielle de la cartographie. De même, les changements à la table à mettre à jour cette association.
Tout cela dépend de la façon dont souvent les tableaux A et B sont modifiés. S'ils sont assez statiques, puis de prendre un coup sur INSERT est moins douloureux coups répétés sur SÉLECTIONNER.
À l'aide de critères conditionnels dans une jointure est certainement différente de la clause where. La cardinalité entre les tables peuvent créer des différences entre les Jointures et les clauses where.
Par exemple, à l'aide d'une affection de type dans une Jointure Externe permettra de conserver tous les enregistrements de la première table répertoriés dans la jointure. En utilisant la même condition dans la clause where sera implicitement modifier la jointure d'une jointure Interne. Le dossier doit généralement être présents dans les deux tables pour accomplir la condition de comparaison dans la clause where.
J'utilise généralement le style donné dans une des réponses.
De cette façon, je peux contrôler le type de jointure.
Lors de l'écriture de requêtes avec notre serveur COMME ou INSTR (ou CHARINDEX en T-SQL) prend trop de temps, donc nous utilisons la GAUCHE comme dans la structure suivante:
Je comprends que cela puisse fonctionner uniquement avec divers terminaisons à la requête, contrairement à d'autres suggestions avec '%' + b + '%', mais il est suffisant et beaucoup plus rapide si vous avez seulement besoin de b+'%'.
Une autre façon de l'optimiser pour la vitesse, mais pas de mémoire) est de créer une colonne dans le "petit" qui est "len(peu de.la clé)" comme "lenkey" et de l'utilisateur qui la place dans la requête ci-dessus.