-1
votes

MySQL Sélectionnez la requête non dans la même table

J'ai une table appelée produits avec 3 colonnes. Une des colonnes est produit_id. Cette colonne contient des ID du produit en double. D'une autre source, je reçois d'autres identifiants de produits. Je veux afficher le nombre d'identifiants de produit non existants. Par exemple, je reçois des ID de produit 12,13,14,15,16 d'une source. Dans mes produits, j'ai 12,13,14. Alors maintenant, je souhaite afficher le nombre d'identifiants de produit non existants. Dans ce cas, devrait être 2. Pour atteindre que j'ai essayé avec une requête inférieure.

SELECT COUNT(DISTINCT product_id) 
FROM products p1 
WHERE NOT EXISTS 
    (SELECT COUNT(DISTINCT product_id) 
     FROM products p2 
     WHERE p2.product_id IN (12,13,14,15,16) AND p1.product_id = p2.product_id)


5 commentaires

En lisant votre question, il est tellement déroutant, pouvez-vous séparer dans une partie de sorte que tout puisse comprendre ce que vous êtes confronté et quel type d'aide vous aidez-vous


Faire les valeurs (12,13,14,15,16) proviennent d'une application ou d'une autre table?


Voulez-vous dire ... rejoindre ... Utilisez (produit_id) Où p2.product_id est null et ... ?


"Par exemple, je reçois des ID de produit 12,13,14,15,16 d'une source" quelle source? Vous avez codé sur celles-ci avec SQL.


Oui, je reçois ces identifiants de manière dynamique d'une autre table


4 Réponses :


3
votes

Si la liste des produits provient d'une application et que vous connaissez également la longueur de la liste (dans ce cas 5), vous pouvez trouver le nombre de produits inexistants dans le tableau comme celui-ci:

SELECT COUNT(DISTINCT q.product_id) - COUNT(DISTINCT p.product_id) AS non_existent_products
FROM (SELECT product_id FROM products2) q
LEFT JOIN products p ON p.product_id = q.product_id


0 commentaires

0
votes

Vous pouvez utiliser quelque chose comme celui-ci xxx

ici, vous sélectionnez Product_ID distinct à partir du produit de table où les identifiants du produit ne sont pas égaux à 1 et 2, créant un alias pour le résultat que A. < / P>

A fait des actes de table temporaire, vous devez donc utiliser A.Product_ID pour sélectionner.

Désolé pour le mauvais anglais, mais j'espère que cela répond à la demande de questions.


0 commentaires

0
votes

Le problème que vous avez que votre sous-requête revient toujours une valeur (quelques fois le retourne 0) de sorte que lorsque vous n'existez pas () c'est toujours faux, car vous avez toujours une réponse. Vous devriez changer n'existe pas par 0> comme celui-ci xxx


0 commentaires

1
votes

Supposons, nous avons 2 tables ayant les valeurs suivantes: xxx

puis cette requête vous donne le nombre d'identifiant 1, 3 et 5 (non existant dans Autres_Products < / code>) xxx

tandis que celui-ci vous donne le total des identifiants distincts non existants dans l'autre table xxx

voir Démo en direct


0 commentaires