-1
votes

Comment rejoindre interne qu'une seule rangée de la deuxième table

J'ai un problème ne jointe qu'une ligne de la deuxième table

Déclaration: xxx

tableau EAN a parfois 2 entrées et donc je reçois mon

art.artnr

doublé dans la sortie.

Je ne peux pas comprendre un moyen de comprendre une rangée d'une rangée de ean

j'ai essayé avec le groupe par mais qui ne fait pas le truc parce que j'ai besoin du * sélectionne < P> Exemples de données: https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=3f0a57795fdeb6745155A6E823643C40

maintenant Si j'exécute ma déclaration, il affiche 2 fois Art.ArtNR 1234556 et 2 fois 23455, mais cela ne devrait pas être le cas que chaque ArtNR doit être affiché une fois


12 commentaires

Vous pouvez utiliser la fonction analytique Row_Number () pour étiqueter les lignes de votre deuxième table, puis vous pouvez vous joindre à l'endroit où le numéro de ligne = 1.


Utilisez distinct dans SELECT


@Muhammadwaheed Ça ne fonctionne pas, car il y a plusieurs entrées dans l'art et j'ai besoin de tous, mais si je me joins à CEAN comme je l'ai fait comme je l'ai fait que certaines entrées d'art ont doublé car il y a 2 entrées en ean


Votre exemple de données ne correspond pas à la SQL, où est ean.typ?


corrigé désolé


Encore une fois, je ne vois pas je ean comment deux ean.typ existe. Veuillez utiliser des données réelles, des données fictives sans aucune planification de la manière de les mettre à jour, ne nous engagera nulle part


Le type n'est pas nécessaire dans ce cas ..


Dans votre échantillon, vous n'avez même pas la colonne artnr dans votre table ean , mais vous listez artnr et unité_artnr comme colonnes dans votre déclaration initiale. Et quelle rangée de ean devrait être préférée? Ils ne sont pas égaux


Aussi pas nécessaire. publier édité


Vous pouvez utiliser croix Appliquer à condition que votre version oracle fonctionne. Quelle version Oracle utilisez-vous? Quelle ligne EAN voulez-vous au cas où il y a plusieurs matchs?


Sur un SIDENOTE: Les jointures séparées par des virgules ont été redondantes dans SQL standard en 1992. Ils sont sujets aux erreurs et peuvent rendre la maintenance plus difficile. Vous ne devriez plus les utiliser. Utilisez ANSI rejoint plutôt comme indiqué dans les meilleures réponses.


Oui, la déclaration est celle qui figure actuellement dans le programme que je vais le rendre amical ANSI. J'utilise Oracle 11. Dans ce cas, cela ne comporte pas lequel parce qu'il y a toujours 2 identiques dans les champs dont j'ai besoin. Je peux les éliminer car ce sont des données client qui varient dans les champs que je n'utilise pas. Donc, juste l'un des deux qui n'a pas d'importance


3 Réponses :


1
votes

Essayez xxx


6 commentaires

Cela ne fonctionne pas, car il y a plusieurs entrées dans l'art et j'ai besoin de tous, mais si je me joins à CEAN comme je l'ai fait, il montre des entrées artistiques doublées car il y a 2 entrées en ean


Veuillez éditer votre message et inclure des exemples de données afin que je puisse vous aider plus


Cela me donne toujours doublé des entrées


Essayez @zaynul Abadin tuhin solution alors


Je l'ai fait mais cela ne passe pas


Selon vos échantillons de données fournis ci-dessus @zaynul Abadin Tuhin Solution fonctionne très bien! J'ai créé vos données et diriger sa requête contre elle et j'ai une rangée



2
votes

Évitez les jointures séparées COMA Utilisez une fonction de join explicite et analytique rang_number () xxx


8 commentaires

Je reçois ce message d'erreur: ORA-00923: Schlüsselwort de Nicht un erwarteter Stelle Gefunden 00923 00000 - "du mot clé introuvable si attendu"


@Elfoderelf vérifier maintenant


toujours la même chose, j'ai déjà vu ça tort et l'enlevé :)


@Elfoderelf dbfiddle.uk/... Vérifiez ce lien qu'il fonctionne


dbfiddle.uk/... J'ai corrigé maintenant les données de sorte que c'est la même chose que c'est Dans ma base de données, voir la sortie de votre requête et du mien, mais je ne peux pas obtenir votre requête pour travailler :( Je vois maintenant que cela fonctionne correctement mais cela ne fonctionne pas à ma place :(


@Elfoderelf Pourquoi ne pas travailler votre place trouver ou partagez votre violon créé


J'ai mis à jour ma question avec le lien s'il vous plaît vérifier maintenant désolé pour les mauvais exemples


devrait être Row_Number () Over (Partition par Unit_ArtNr Order by Null) RN de ean dbfiddle.uk/ ...



1
votes
ARTNR   EAN_ID  EAN         UNIT_ARTNR  TYP     ROWNR
23455   5       7771234568  23455       LE4     1
1234556 1       1234        1234556     LE4     1

2 commentaires

Que se passe-t-il si la table EAN ait 28 colonnes, puis-je faire sélectionner la sous-requête sur la jointure interne comme "Select *"?


Ean. * Devrait fonctionner exactement identique comme toutes les colonnes simples répertoriées. Sélectionnez EAN. *, Row_Number () ... . J'aime seulement sélectionner ce qui est nécessaire et écrivez à toutes les colonnes explicitement.