Sélectionnez distinct de plusieurs champs en utilisant sql
J'ai 5 colonnes correspondant aux réponses à un quiz de base de données - droit, wrong1, wrong2, wrong3, wrong4
Je veux retourner toutes les réponses possibles sans doublons. J'espérais atteindre cet objectif sans l'aide d'une table temporaire. Est-il possible d'utiliser quelque chose de similaire à ceci?:
select c1, c2, count(*)
from t
group by c1, c2
Mais cela renvoie 3 colonnes. Je voudrais une colonne de réponses distinctes.
Merci pour votre temps
source d'informationauteur Bryan
Vous devez vous connecter pour publier un commentaire.
Cela devrait vous donner toutes les valeurs distinctes de la table. Je présume que vous souhaitez les ajouter lorsque les clauses de sélectionner uniquement pour une question particulière. Toutefois, cette solution nécessite 5 sous-requêtes et peut être lente si votre table est énorme.
Le DISTINCT est superflu, parce que l'UNION ne sera pas de retour lignes qui sont identiques pour toutes les colonnes. (Quand vous voulez dupliqué, ou si vous savez que pas de doublons existent, utilisez l'UNION de TOUS pour des performances plus rapides)
Qui ne devrait pas être le cas si vous utilisez de l'UNION, uniquement si vous utilisez de l'UNION de TOUS les
J'ai fourni une réponse ci-dessus.
Cependant j'ai pensé que la meilleure manière de le faire à l'aide de UNPIVOT.
Vous pouvez fournir toute clause where dans la sous-requête interne:
Bien vous pouvez utiliser un SYNDICAT et une course de 5 sélectionnez états, un pour chaque colonne de votre tableau. Il ressemblerait à quelque chose comme ceci:
Cela vous donnera une liste unique contenant toutes les réponses. Vous aurez toujours des doublons, si vous avez plusieurs copies de la même réponse dans une seule colonne.
Colonnes de "la droite, wrong1, wrong2, wrong3, wrong4" signifie que vous avez un mal conçu à la base de données. En général, un nombre ou une lettre suffixe d'un nom de colonne devrait être un drapeau rouge pour repenser le problème.
Comme vous l'avez remarqué, votre conception exige de hack pour obtenir une solution à un type de données de la réduction de problème.
Est-ce cela que vous vouliez?
select distinct c1 from t
Dans
MySQL
ETMS SQL
:Pour
Oracle
ajouterFROM DUAL
à chaque le nombre sélectionne.C'est la réponse exacte.