Je passe la requête suivante où les deux tables sont constituées d'une colonne entière: Je prépare la requête SQL ci-dessus pour une instance de serveur MySQL et dans le cadre de cette requête que je veux Vérifiez si une certaine valeur est contenue dans un ensemble. J'ai atteint qu'avec la syntaxe suivante: p> Cependant, j'ai aussi un cas où tout match d'un ensemble de valeurs suffit. En pseudo-SQL, j'aimerais faire quelque chose comme ceci: En raison de la nature des données, je souhaite éviter une explosion logique sous la forme de: p> Étant donné que la terminologie concernant ma question est assez générale (le mot clé est Quelle est la meilleure façon de réaliser le résultat souhaité? Une approche que je peux penser à utiliser une jointure interne sur les deux ensembles et voir si les rangées retournées sont plus grandes de 0, mais je ne peux pas penser à un moyen d'exprimer cela. P> P> 2202 dans (SELECT * des chiffres) CODE> P> (2202, 2203, 2204) dans (sélectionnez * à partir de chiffres) code> qui ne fonctionnera évidemment pas. P> 2202 dans (sélectionnez * des chiffres) ou 2203 dans (sélectionnez * des chiffres) ou 2204 dans (Sélectionnez * à partir de chiffres) CODE> P> dans code>), je n'ai pas trouvé de questions décrivant mon problème, Même si je crois qu'il y ait. p>
5 Réponses :
A en clause peut être refacturé comme une jointure interne
pouvez-vous utiliser quelque chose comme: p> https://dev.mysql.com/doc/refman/8.0/fr/string -fonctions.html # Function_Find-in-Set P> P> wind_in_set code> et une variable?
Créez une table temporaire avec toutes les valeurs dont vous avez besoin (2202, 2203, 2204, ...). Joindre à l'autre table. P>
... WHERE EXISTS (SELECT * as n FROM numbers HAVING n IN (2202, 2203, 2204))
Pouvez-vous expliquer cela plus loin? Comment cet extrait peut-il insérer 2, 1 ou 0 dans une nouvelle table?
Cela ne peut pas, cela répond à la question initiale de trouver une intersection de deux listes. Il n'y avait à l'origine aucune mention de cartographie des valeurs. La cartographie Les valeurs nécessitent un code répétitif ou une table pour fournir cette cartographie. La question est horriblement écrite.
Merci d'éviter la réponse non motivée. La solution et uniquement qui s'expliquent rarement à d'autres personnes qui ne connaissent pas le contexte.
Vous pouvez utiliser exister code> conditions, comme: insert into othernumbers(number)
values(
case
when exists (
select 1
from numbers
where num in (2202, 2203, 2204)
) then 2
when exists (
select 1
from numbers
where num = 2201
) then 1
else 0
end
);
Cherchez-vous l'inverse?
Sélectionnez * à partir de numéros où MyColumn in (2202.2203.2204) code>?Votre question n'est pas claire pour moi .. Veuillez mettre à jour votre question Ajoutez un échantillon de données approprié et le résultat de l'expecse
S'il vous plaît montrer la requête complète.
J'ai mis à jour la réponse pour inclure la requête initiale complète. Les conceptions de tables ne sont pas incluses, car elles ne sont qu'une seule colonne constituée d'entiers.
Veuillez partager la structure de la table et quelques données d'échantillonnage.
@Nicohaase qui ne semble plus nécessaire car d'autres ont saisi le problème assez clairement. Pour créer la table:
Créer des numéros de table (numéro INT); code> et l'autre table est exactement identique, avec un nom différent (soménumbers). Vous pouvez remplir tous les entiers que vous souhaitez trouver des données d'échantillon. Je ne pense pas que cela compte pour cette question.