Avoir à écrire une instruction select qui renvoie le nom, la ville et l'état de chaque fournisseur situé dans une ville et un état uniques. J'ai vu plusieurs threads similaires mais aucune des réponses données n'aide pour une raison quelconque. Mon code ne peut toujours pas renvoyer le nombre correct de résultats:Problèmes lors de la sélection de résultats uniques dans la sous-requête MySQL
Ecrivez une instruction select qui renvoie le nom, la ville et l'état de chaque fournisseur situé dans une ville et un état uniques. Il doit retourner 38 lignes.
/*problem 6*/
SELECT
vendor_name, vendor_city, vendor_state
FROM
vendors
WHERE
vendor_city || vendor_state NOT IN (SELECT distinct
vendor_city || vendor_state
FROM
vendors
GROUP BY vendor_city, vendor_state having count(*)>1)
ORDER BY vendor_state , vendor_city;
Votre sous-requête renvoie-t-elle des données correctes? –
Tout ensemble de colonnes 'GROUP BY''d sera toujours unique, donc' DISTINCT' est superflue. Bien que dans une clause 'IN' les doublons ne feraient pas de différence de toute façon. La concaténation ('||') va ralentir les comparaisons - vous devriez pouvoir comparer les tuples: 'WHERE (vendor_city, vendor_state) NOT IN (...)'. Outre le contrôle de la sous-requête, comme teju l'a mentionné, quels résultats obtenez-vous? Trop de lignes, trop peu de lignes? Que se passe-t-il si vous inversez la colonne que vous commandez, est-ce que cela révèle quoi que ce soit? –
Dans MySQL, l'opérateur '||' est synonyme de 'OR', pas de concaténation de chaîne. Si nous voulons une concaténation de chaînes, nous utilisons la fonction 'CONCAT()'. (Notez le cas de bordure avec concaténation, potentiel pour l'état correspondant = 'aa' ville = 'a' avec l'état = 'a' ville = 'aa', puisque la concaténation d'état et de ville donne la même valeur dans les deux cas. – spencer7593