0
votes

Optimiser la requête SQL, besoin de suggestions

J'ai une table dans SQL Server ayant 4 colonnes: xxx pré>

Je dois trouver des factures qui ont la même facture no, la date et l'AMT mais une pièce d'identité différente mais différente. Je peuploie les résultats faisant de soi-même, mais on dirait que ce n'est pas le moyen optimisé d'aller chercher des résultats. P>

Ma requête: p>

select * from table t1 join 
table t2 on t1.invoice = t2.invoice 
where t1.invoice=t2.invoice and t1.amount=t2.amount and t1.date =t2.date and t1.id!=t2.id


7 commentaires

Hi @ user9185088, il n'est pas possible que vous utilisiez MySQL et QslServer, alors veuillez éditer cela dans vos balises de questions. Aussi, s'il vous plaît partager avec nous, dans votre question, la requête que vous avez déjà faite? Merci!


Avez-vous essayé groupe par factorian, date, montant ?


Vous êtes la bienvenue que vous avez toujours SQL-Server et MySQL Tag?


Oui, j'ai essayé le groupe par mais en sortie, je n'ai besoin que de tous les enregistrements.


Mais, user9185088, nous ne savons toujours pas quelle base de données utilisez-vous? Est-ce Oracle, MySQL, SQLSERVER ou autre chose? Le code n'est pas le même pour ces bases de données.


La base de données est SQLServer


Pourriez-vous partager le script Créer du tableau d'exécution de la table et de la requête afin que nous puissions suggérer des suggestions plus réalistes.


4 Réponses :


0
votes

Essayez ceci. Utilisation de la jointure gauche et filtrez ces nuls.

select * from (
    select t1.invoiceno, t1.date, t1.amt, t1.id, t2.id as t2ID
    from invoices t1
    left join invoices t2 on t2.invoiceno = t1.invoiceno 
        and t2.date = t1.date 
        and t2.amt = t1.amt
        and t2.id != t1.id) t3 
where coalesce(t3.t2ID, 0) != 0


0 commentaires

0
votes

Vous pouvez utiliser des index pour accélérer la récupération des grandes bases de données. Utilisez une sous-requête mais n'utilisez pas une sous-requête juste pour afficher une colonne.

J'ai conseillé d'utiliser une sous-requête comme nouvelle table pour utiliser des jointures. Tout comme la première réponse.


0 commentaires

0
votes

Utilisation n'existe pas xxx


3 commentaires

Bonjour Zaynul, merci d'avoir répondu mais je ne reçois aucun enregistrement après avoir utilisé la requête de la question mentionnée


@ user9185088 Pourriez-vous partager les données de vos tables et la sortie attendue


@ user9185088 J'ai modifié ma requête et voici la démo dbfiddle.uk/...



0
votes

doit trouver des factures qui ont la même facture no, la date et l'AMT mais un identifiant différent.

Utiliser Existe : xxx

Cela affiche les factures correspondantes sur des lignes adjacentes. Pour la performance, vous voulez un index sur (facture, date, montant, identifiant) .

Si vous voulez juste des triplés où cela se produit, vous pouvez utiliser l'agrégation: xxx

Remarque: S'il y a plus de deux doublures, cela ne montre que deux identifiants.


0 commentaires