0
votes

Comment retourner des ID de produit uniques dans cinq requêtes de table / vue?

J'ai une requête complexe qui montrée dans la photo ci-dessous Entrez la description de l'image ici xxx

i supprime des codes à barres en double par ceci où xxx

Comment supprimer une carte d'identité en double ?? Je veux retourner 1 enregistrement pour le produit avec ID 31 dans la photo ci-dessous: Entrez la description de l'image ici

Désolé pour mon mauvais anglais.


10 commentaires

Mettez à jour votre question add code sous forme de texte non comme image ..


Comment voulez-vous dire catid double, lorsque vous avez deux valeurs distinctes: 1 et 2 ???


Il est édité excusant moi


MySQL et SQL Server sont des produits très différents. N'utilisez pas les deux tags à moins que vous ne souhaitiez demander à quelque chose pour bases de données . Cela ressemble à SQL Server


Bonjour, et bienvenue au débordement de pile. Il vous aiderait si vous pouviez poster des échantillons de données et des résultats attendus - dans le tir de l'écran que vous affichez, il apparaît que l'ID 31 a deux enregistrements correspondants dans View_Product_Category, avec différentes valeurs CAT_ID - que vous souhaitez supprimer?


Quant à trouver et supprimer des doublons, vous trouverez de nombreuses questions en double montrant comment utiliser Row_Number Over () pour classer les lignes des colonnes que vous utilisez pour détecter des doublons, puis supprimer ceux dont Le numéro de ligne est> 1. Cela fonctionne dans toutes les versions SQL Server prises en charge. Cela fonctionne également dans MySQL 8.0. Il n'y a pas besoin de la Sélectionnez max () .... Subquiery. L'utilisation de classement est beaucoup plus rapide aussi, car les sous-sollicités doivent être exécutées avant que la requête extérieure ne puisse être évaluée, ce qui entraîne deux numérisations de table au lieu d'une


BTW Les deux rangées avec ID 31 ne sont pas dupliquées. Les deux lignes ont une valeur différente catid . Affichez les schémas de table, les données de test et la sortie souhaitée afin que les gens puissent comprendre ce que vous voulez dire, ce que vous attendez. Il se pourrait que le reste de la requête soit faux


Ressemble à Powerbuilder pour moi, pas c #.


Il existe un grand nombre de relations entre les tables de produits et de catégories et entre les tables de produits et de code à barres et entre les tables de produits et de prix, je souhaite récupérer mes produits avec un prix maximum et une catégorie et un code à barres


@Panagiotiskanavos Oui, ne pas dupliquer, mais je veux revenir un 31


3 Réponses :


3
votes

La méthode la plus simple dans SQL Server est la suivante:

SELECT TOP (1) WITH TIES . . .
FROM . . .
. . .
ORDER BY ROW_NUMBER() OVER (PARTITION BY product.id ORDER BY (SELECT NULL))
  • apprendre à utiliser des alias de table! L'utilisation du nom de la table complète est difficile à écrire et encore plus difficile à lire. Li>
  • Les alases de table doivent être abréviations - indice: tr code> pour product_translations code>. Li>
  • J'ai écrit des lots et beaucoup de SQL et je n'ai jamais eu à mélanger gauche code> et joindre à droite code> s. Commencez avec la table dans laquelle vous souhaitez conserver toutes les lignes, puis utilisez simplement rejoindre code> s. Li> ul> p>


3 commentaires

Ma requête est construite avec SQL Server, une jointure droite et une jointe à gauche est dépend de la table de base, merci pour votre réponse.


@ DAVID2020 La requête est écrite à l'aide du concepteur, pas SQL Server. Ce n'est pas différent des requêtes écriées à la main - que max () a dû être écrit à la main en fait. En général, le concepteur n'est pas parfait et n'est généralement utilisé que comme moyen de démarrer rapidement. En tout cas, le concepteur peut travailler avec des alias de table, bien qu'il soit généralement plus rapide de simplement éditer la requête


@Panagiikanavos Peu pire est que le concepteur crée des requêtes avec la syntaxe obsolète. 3 & 4 Naming dans la liste des colonnes a été obsolète depuis un moment. Semble que si MMS ne peut pas adhérer à cela, il y a peu à présent une chance que cela soit effectivement supprimé.



1
votes

Je soupçonne qu'il peut y avoir un problème de langue - il semble que vous ayez une requête et que cela retourne plus de lignes que vous le souhaitez. Je ne pense pas que vous voulez supprimer n'importe quoi.

La raison pour laquelle vous voyez deux instances d'ID de produit 31 est qu'il existe deux enregistrements correspondants dans View_Product_Category avec différents catids (1 et 2). Sans en savoir plus sur les données, il est difficile d'être certain de faire face à cela; La requête ci-dessous les limite à enregistrer avec catid 1. xxx


2 commentaires

merci pour votre réponse, mais catid est variable et "et vpc.catid = 1 'est ma réponse


Lequel voulez-vous inclure - un aléatoire, le plus haut, le plus bas?



1
votes

en fonction de votre phrase où vous utilisez le groupe et vous pouvez répéter ceci pour voir view_product_category Je suppose que ci-dessous le code est votre réponse xxx

et complète de requête est xxx


0 commentaires