-2
votes

Comment utiliser la commande avec distinct dans MySQL?

J'ai deux tables clients et échange. Je veux obtenir des clients ID en cours d'exécution à gauche Rejoignez la requête. Mais quand j'exécute la requête, il jette une erreur. XXX

ERROR:  Entrez la description de l'image ici


11 commentaires

La requête Vous avez eu une erreur sur () autour de `clients`.`id` comme` client_id` qui a provoqué l'erreur.


Je ne vois rien de mal avec votre code et éventuellement la requête de votre question n'est même pas ce que vous avez réellement couru pour générer cette erreur. Remarque: vous NE PAS Besoin de ces backtes laids, vous pouvez donc les supprimer.


Y a-t-il un autre moyen de?


Quelle est votre sortie après avoir supprimé ()? Est-ce toujours causant une erreur?


Je n'utilise pas ()


Sélectionnez Distinct Clients.Id comme Client_id à partir de Clients Joindre gauche Exchange sur Clients . id = échange . client_id clients . iex_status = "actif" commander par échange . validid_to Desc


Sélectionnez des clients distincts.Id comme c_id à partir de clients à gauche rejoignez Exchange sur Clients.Id = Exchange.client_id où Clients.Ex_Status = 'Active' Commande par Exchange.Validity_To Desc


Ne devez-vous pas d'abord choisir une colonne avant de pouvoir commander par elle? Je ne vois pas Exchange.Validity_to dans votre sélection.


# 3065 - Expression n ° 1 de la clause par clause ne figure pas dans Sélectionner la liste, références Colonne 'crm.exchange.validity_to' qui n'est pas dans la liste de sélection; Ceci est incompatible avec distinct


Comment vous attendez-vous aux données (C1, C2) (1,3), (2,2), (1,1), Sélectionnez Distinct C1 ... Commande par C2 à commander?


S'il vous plaît Utiliser du texte, pas des images / liens, pour le texte - y compris les tableaux et les erds. Utilisez des images uniquement pour ce qui ne peut pas être exprimé en texte ou pour augmenter le texte. Les images ne peuvent pas être recherchées ou coupées et collées. PS Lorsque vous êtes googlé pour "Site: Stackoverflow.com" et votre message sans votre # Strings & Expression #, qu'avez-vous appris?


3 Réponses :


0
votes

J'espère que vous allez bien, j'ai vérifié votre requête mais j'ai trouvé 2 diff. points 1: "Sélectionnez Distinct Clients . ID AS CLIENT_ID à partir de CLIENTS JOIN DE GAUCHE Exchange sur clients . id = échange . client_id Clients . iex_status = 'Active' Commande par Exchange . validid_to Desc "

Vous montrez cette requête en premier et montrant une erreur dans votre requête

2: vous utilisez "(" dans votre requête que vous avez exécuté dans SQL, je pense que votre première requête est correcte qui vous donnera droit.

alors s'il vous plaît ne pas utiliser () dans des champs distincts.

merci


3 commentaires

Alors comment puis-je obtenir un résultat unique?


J'utilise cette requête: Sélectionnez des clients distincts.Id comme c_id à partir de clients à gauche rejoint Exchange sur Client.Id = Exchange.client_id où Clients.Ex_Status = 'Active' Commande par Exchange.Validity_To Desc


@AJ Clarifiez via des modifications, pas des commentaires. Donnez un exemple de reproductible minimal .



1
votes

Ajouter Exchange . validité_to cette colonne en sélection, sinon il lancera cette erreur validation_to n'est pas dans la liste de sélection; Ceci est incompatible avec distinct xxx

mais à partir de votre coup d'écran, il semble que vous utilisiez la parenthèse après distinct c'est pourquoi vous avez l'erreur


4 commentaires

@ Sstrowberry, lorsque vous sélectionnez uniquement des colonnes de résultats de résultat distinctes, ne peut être utilisée dans l'ordre par. Cependant, cette réponse ne résout pas le problème de l'OP.


@Strowberry dbfiddle.uk/... Pouvez-vous vérifier ce lien sur Distinct et Commander par


L'astucieux ne veut pas sélectionner cette colonne Si ce n'est pas une solution. Voir le lien en double sur la question de savoir ce que les besoins de l'intérêt.


@jarlh ah, je suis corrigé. Il s'agit d'une nouvelle fonctionnalité de MySQL 8, non présente dans MySQL 5.x (montrant la date de décharge que je suis) et n'est pas présent dans Mariadb non plus. Quoi qu'il en soit, je doute que cela soit pertinent pour le problème de l'OP.



0
votes

Selon votre image ci-jointe, vous pouvez modifier des alias hors des accolades tels que -

select distinct
    (`clients`.`id` as `client_id`) as 'client_id'
from `clients`
left join `exchange`
    on `clients`.`id` = `exchange`.`client_id`
where
    `clients`.`iex_status` = 'Active'
order by
    `exchange`.`validity_to` desc 


0 commentaires