Maison >base de données >tutoriel mysql >Comment trouver l'intersection de deux requêtes dans MySQL

Comment trouver l'intersection de deux requêtes dans MySQL

coldplay.xixi
coldplay.xixioriginal
2020-10-26 15:56:512934parcourir

Méthode MySQL pour trouver l'intersection de deux requêtes : vérifiez d'abord l'ID d'instance de processus qui satisfait un seul ensemble de paires clé-valeur variable ; puis utilisez chaque paire clé-valeur variable comme condition pour trouver le processus correspondant ; ID d'instance; Enfin, faites l'intersection de ces deux ensembles d'ID d'instance de processus pour obtenir le résultat souhaité.

Comment trouver l'intersection de deux requêtes dans MySQL

Plus de recommandations d'apprentissage gratuites connexes : tutoriel mysql (Vidéo)

Comment trouver l'intersection de deux requêtes dans MySQL :

Exigences du projet :

Besoin d'obtenir l'identifiant d'une instance de processus qui contient certaines variables de processus (le nombre est incertain et doit être inclus, pas seulement certaines d'entre elles)

2. Description détaillée :

1. Table des variables de processus act_hi_varinst

champs : PROC_INST_ID_ (identifiant de l'instance de processus), NAME_ (nom de la variable), TEXT_ (valeur de la variable)

Comment trouver lintersection de deux requêtes dans MySQL

Figure 1

2. Vous devez maintenant interroger l'identifiant d'instance du processus correspondant contenant les variables formId=142 et approuveType=sealApply

Comme le montre la figure 1, trouvez simplement la valeur indiquée dans la ligne rouge, le résultat final est

Comment trouver lintersection de deux requêtes dans MySQL

Figure 2

3. Implémentation du code

1. J'ai d'abord essayé d'utiliser dans Le résultat de la requête est le même que celui de la figure 1 (l'instruction de requête suivante signifie : recherchez l'ID d'instance du processus contenant la valeur de la variable formId=142 ou approuveType=sealType. Tant que l'un des les conditions de plusieurs variables sont satisfaites, la ligne sera Take it out), cette méthode n'est pas réalisable

SELECT
ahv.PROC_INST_ID_,
ahv.NAME_,
ahv.TEXT_
FROM
act_hi_varinst ahv
WHERE
(ahv.NAME_, ahv.TEXT_) IN (
('formId', '142'),
('approveType', 'sealApply')
);

2 (Solution réalisable) Essayez d'utiliser l'intersection (mysql lui-même n'a pas d'implémentation d'intersection, donc. vous ne pouvez le simuler que vous-même)

Idées de requête : vérifiez d'abord Pour l'ID d'instance de processus qui satisfait un seul ensemble de paires clé-valeur variable, chaque paire clé-valeur variable est utilisée comme condition pour connaître la ID d'instance de processus correspondant (dans l'exemple actuel, il y aura deux ensembles d'ID d'instance de processus), et enfin pour les deux ensembles de processus, prenez l'intersection des identifiants d'instance, vous obtenez ainsi le résultat souhaité

SELECT
PROC_INST_ID_
FROM
(
SELECT
ahv.PROC_INST_ID_
FROM
act_hi_varinst ahv
WHERE
(ahv.NAME_, ahv.TEXT_) = ('formId', '142')
UNION ALL
SELECT
ahv.PROC_INST_ID_
FROM
act_hi_varinst ahv
WHERE
(ahv.NAME_, ahv.TEXT_) = ('approveType', 'sealApply')
) t
GROUP BY
PROC_INST_ID_
HAVING
count(PROC_INST_ID_) = 2;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn