3 Réponses :
Vous pouvez utiliser cette approche: Une meilleure approche pourrait être: p>
Cette méthode est très inefficace, car elle dirigera cette requête interne pour chaque ligne de test. Cela commencera à avoir une incidence sur la performance assez rapidement lorsque la table grandit.
@Braiba: Vous avez raison. La deuxième approche pourrait réduire la complexité.
La requête interne est fonctionnellement la même que celle de Ypercube's en premier; Je ne vois pas ce que la requête extérieure ajoute ici, ou je manque quelque chose?
Eh bien, j'utiliserais l'approche suivante à la place:
SELECT DISTINCT ta.id, ta.attribute
FROM test ta
LEFT JOIN test tb
ON ta.id = tb.id AND ta.attribute <> tb.attribute
WHERE tb.id IS NULL;
Les requêtes imbriquées sont bien aussi longtemps que vous les rejoignez, plutôt que de les mettre dans une clause Select / OUT / ON. Rejoindre une table sur elle-même comme ça n'est pas beaucoup mieux cependant; Le temps de traitement augmentera toujours de manière exponentielle car la table augmente.
SELECT id, MIN(attribute) AS attribute FROM test GROUP BY id HAVING MIN(attribute) = MAX(attribute) ;
+1 pour la façon la plus efficace de le faire. La chose min = max est vraiment intelligente; Je me souviendrai de ce tour pour l'avenir.
J'aime vraiment cette réponse aussi. Quelle est l'étiquette sur tellement? D'abord venu d'abord servir ou meilleure réponse?
@Terry Uhlang La meilleure réponse a le sens le plus sens à moi puisque ce sera le premier autre utilisateur du même problème, voir quand ils rechercheront cette question.
@Terryuhlang: La réponse que vous avez utilisée ou celle qui vous ait mieux aidé ou celle que vous pensez est la meilleure. Le choix est à vous: Quelle réponse faire J'accepte si j'ai plusieurs réponses correctes?
Sûrement si min (attribut) = max (attribut) code> Il serait sans danger pour simplement Sélectionnez ID, attribut code>? Pourrait-il y avoir un avantage de performance pour réutiliser min () code> dans ce cas?
@Airthomas, cela pourrait être sûr mais ce ne serait pas une requête valide. Et même si min (attribut) = max (attribut) code> Il peut toujours y avoir des lignes où l'attribut code> est null code>. Donc, ce n'est pas sûr non plus.
En réalité, vous pouvez sélectionner des colonnes non incluses dans le groupe par code> instruction dans MySQL. Mais votre point sur null code> est pris.
Oui, vous pouvez. En fonction des paramètres que vous avez.