MySQL Distinctes et LEFT JOIN retourne en double
J'ai 2 tables dans ma base de données. Un nommé data
, un autre nommé changes
.
Colonnes de la table sont
Data
------------
|id | name |
|-----------
|1 | Test |
|2 | Hello|
------------
changes
------------------------------------
|id | name | related_id | Comments |
|-----------------------------------
|1 | Test | 1 | Example |
|2 | Hello| 2 | Example2 |
|3 | Hello| 2 | Example3 |
------------------------------------
Comme vous pouvez le voir, changes
.related_id
est une clé étrangère vers data
.id
.
changes
peut avoir plusieurs lignes de même name
et related_id
et les différents commentaires.
Après l'exécution de cette requête, j'ai réalisé que plusieurs lignes sont retournées où, par exemple, Hello
peut apparaître 2 fois.
SELECT DISTINCT data.name, changes.comments FROM data LEFT JOIN changes ON data.id = changes.related_id
Result
--------------------
|name | comments |
|-------------------
|Hello | Example2 |
|Hello | Example3 |
--------------------
Comment puis-je faire en sorte que seulement 1 ligne est retournée? J'ai DONC chercher des réponses et de nombreux déclaré à l'aide de DISTINCT
, mais il ne fonctionne pas dans mon cas.
Merci d'avance.
Tous les enregistrements peuvent retournés. Je voulais seulement un unique
name
avec toutes les données associées. Est-ce possible?Si vous avez seulement besoin de l'
name
, puis de sélectionner uniquement les name
: SELECT DISTINCT data.name FROM data ...
Mais alors vous ne avez même pas besoin d'un join
si l'utilisateur d'avoir plus d'un commentaire, alors vous allez obtenir un double nom, mais pas d'enregistrement. si vous voulez le nom unique, alors ne choisissez pas n'importe quel champ de la table de gauche et d'utilisation distinctes
Mais je voudrais avoir toutes les données associées, depuis
changes
table pour retourner avec la name
. Juste que si il y a plus de 1 ligne, de retour de l'un avec le dernier id inséré. Dans mon cas, "Bonjour" sera de retour que id
de 3 et comments
de "Exemple3"
OriginalL'auteur user2301818 | 2014-01-05
Vous devez vous connecter pour publier un commentaire.
Si vous voulez qu'un seul enregistrement pour chaque nom dans votre
data
table et il peut être tout enregistrement, puis vous pouvez les regrouper par la colonne unique (name
) et l'utilisation d'une fonction d'agrégation sur l'autre colonne commemax()
Super! - Vous réussi à résoudre mon problème! Merci beaucoup! Appris quelque chose de nouveau aujourd'hui 🙂
+1 pour le GROUPE PAR des données.nom
OriginalL'auteur juergen d