Trouver les lignes qui ont des valeurs différentes pour une colonne donnée dans Teradata SQL
Je suis en train de comparer deux adresses à partir de la même ID pour voir si elles correspondent. Par exemple:
Id Adress Code Address
1 1 123 Main
1 2 123 Main
2 1 456 Wall
2 2 456 Wall
3 1 789 Right
3 2 100 Left
Je suis juste essayer de comprendre si l'adresse de chaque ID de matchs. Donc, dans ce cas, je veux revenir juste l'ID 3 comme ayant une adresse différente de l'Adresse de Code 1 et 2.
Cool! Qu'avez-vous essayé?
Qui SGBDR? Si SQL Server, essayez de regarder les question.
Désolé, je suis dans Teradata.
Vous avez pu le lire sur les jointures
Je vous recommande de regarder à long et dur sur vos tables. Un des principes du SGBDR, c'est l'idée de l'unicité, ce qui rend votre vie beaucoup plus facile. L'idée est que chaque ligne représente une entité distincte et n'ligne doit être dupliquée; l'unicité aurait fait de cette question inexistante. Si pas trop tard, je vous recommande de revoir votre conception de table.
Qui SGBDR? Si SQL Server, essayez de regarder les question.
Désolé, je suis dans Teradata.
Vous avez pu le lire sur les jointures
Je vous recommande de regarder à long et dur sur vos tables. Un des principes du SGBDR, c'est l'idée de l'unicité, ce qui rend votre vie beaucoup plus facile. L'idée est que chaque ligne représente une entité distincte et n'ligne doit être dupliquée; l'unicité aurait fait de cette question inexistante. Si pas trop tard, je vous recommande de revoir votre conception de table.
OriginalL'auteur Hatt | 2012-12-04
Vous devez vous connecter pour publier un commentaire.
Rejoindre la table avec elle-même et de lui donner deux alias (
A
etB
dans l'exemple suivant). Cela permet de comparer les différentes lignes de la même table.Les "moins de" comparaison
<
garantit que vous obtenez 2 adresses différentes et vous n'obtenez pas les 2 mêmes codes d'adresse deux fois. À l'aide de "pas égal"<>
au lieu de cela, obtenir les codes (1, 2) et (2, 1); chacun d'eux pour leA
alias et leB
alias à son tour.De la clause de jointure est responsable de la liaison des lignes où la clause where-tests de conditions supplémentaires.
La requête ci-dessus fonctionne avec tous les codes d'adresse. Si vous voulez comparer des adresses spécifiques avec les codes d'adresse, vous pouvez modifier la requête pour
J'imagine que ça peut être utile pour trouver des clients ayant une adresse de facturation (Adresse Code = 1 par exemple) qui diffère de l'adresse de livraison (Adresse Code = 2) .
wow, très couperet. Merci de donner deux exemples.
OriginalL'auteur Olivier Jacot-Descombes
Cela fonctionne pour PL/SQL:
OriginalL'auteur Yasin Okumuş
Vous pouvez le faire à l'aide d'un groupe par:
Une autre manière d'écrire cela peut sembler plus clair, mais ne fonctionne pas bien:
OriginalL'auteur Gordon Linoff
Personnellement, je voudrais imprimer un fichier à l'aide de Perl ou Python dans le format
pour chaque ligne de sorte que le fichier comporte autant de lignes qu'il y a de colonnes. Puis je ferais un
diff
entre les deux fichiers, en supposant que vous êtes sous Unix ou de les comparer à l'aide de l'équivalent utilty sur un autre OS. Si vous avez plusieurs jeux d'enregistrements (c'est à dire plus d'une ligne), je voudrais ajouter à chaque ligne du fichier et ensuite le fichier serait NUM_DB_ROWS * NUM_COLS lignesL'avantage d'écrire un script pour le faire, c'est qu'il peut être fait de travailler pour une table sans avoir à spécifier les noms de colonnes comme on peut les lire dans les tables système. J'ai écrit quelques scripts de ce genre pour QAs qui avait pour comparer les jeux d'enregistrements à travers les différentes bases de données où seuls SQL ne suffit pas et même si elle l'était, ils auraient à écrire une requête personnalisée pour chaque tableau afin de refléter les différentes colonnes. La seule table de données spécifiques dans mes scripts, en plus, bien sûr, la table de données telles que le nom, le schéma et le serveur, serait la chaîne de critères.
Mais au lieu d'avoir à préciser à chaque nom de colonne, ce qui est relativement peu pour une configuration personnalisée. SQL est un outil formidable, mais il a cabinet de limitations mieux surmonter l'extérieur (dans des choses comme les langages de script) plutôt que des instructions SQL qui ressemble à un Rube Goldberg machine. J'aime la propreté, de la structure et de la simplicité. Vous pouvez garder votre downvote, je ne vous demande pas de changer, cette élaboration est plus de ma philosophie pour le reste du monde
Pas de. SQL est faite pour travailler avec les données, et les données qui existe déjà dans la base de données. Il n'y a absolument aucun avantage pour le déplacer à l'extérieur de la base de données pour trouver les doublons (comme les autres réponses ont montré). Encore une fois, utiliser les outils appropriés pour le travail, et votre réponse ne l'est pas. Si on peut parler d'un "script", signifiant une procédure stockée, c'est bien. La physique de l'exportation des données vers un fichier externe, puis l'exécution d'un script externe tâche dans une autre langue (que vous créez par "système de lecture des tableaux"), est tout simplement faux. (J'ai été tout simplement de la courtoisie quand j'ai expliqué mon downvote.)
Vous savez très bien ce que je voulais dire, mais pour préciser, si vous n'êtes pas confondre: bien sûr, je voulais dire SQL est faite pour travailler avec des données vous avez déjà enregistré dans la base de données. peut-être que si vous étiez à regarder à l'extérieur d'essayer de tout faire en Perl ou Python (votre apparente "one size fits all" de la solution), vous pourriez réaliser qu'il y est plus de la programmation que de manipuler des fichiers texte. OIE, il y a plus d'outils dans la boîte à outils que juste un marteau. "Prendre parfaitement bien les données de la DB, l'extraire dans un fichier texte séparé, de jouer avec les données, et ensuite mettre à jour la base de données"??? Vraiment???
OriginalL'auteur amphibient