J'ai une passe de base de données de Le site Web de Geonames pour la Grande-Bretagne . Il se compose d'environ 60000 enregistrements. Exemple de données est la suivante:
id | name --------------------------- 2652355 | Cornwall, England
3 Réponses :
dans MySQL, vous pouvez utiliser une sous-requête corrélée: dans mysql 8+, vous pouvez également utiliser row_number () code>: p>
select l.*
from (select l.*,
row_number() over (partition by name
order by (feature_code = 'RGN') desc, id
) as seqnum
from locations l
) l
where seqnum = 1;
J'ai mis à jour mon message mais je ne comprends pas comment je peux appliquer votre première requête à la recherche par nom?
@ adam78. . . Vous alliez simplement ajouter et
où la clause CODE>.
désolé je ne comprends pas ça. Pourriez-vous mettre à jour votre réponse en utilisant le SQL que j'ai posté afin que je puisse comprendre ce qui se passe?
Une approche pourrait être existante et syndicat tout
Remarque Il pourrait y avoir plusieurs lignes avec le même nom, mais différentes codes_codes_surfi, donc je aurais besoin de la requête pour être dynamique.
@ adam78 Ma réponse couvrira votre énoncé de problème décrire afin que vous ayez un modèle de données d'autre, je pense que vous devez décrire cela dans la description.
Je souhaite rechercher des enregistrements par des noms de lieu - j'essaie de construire une recherche automatique. Lorsque les noms sont les mêmes, je veux vous assurer que la recherche renvoie le disque distinct mais en utilisant les critères comme décrit.
@ Adam78 Cela fonctionnera pour n'importe quel nom de lieu et vous pouvez rechercher simplement en ajoutant une condition et un nom comme "Cornwall%"
J'ai mis à jour mon message avec le SQL que j'utilise pour mieux décrire ce que j'essaie d'atteindre. Pouvez-vous mettre à jour votre réponse en utilisant le SQL dans mon message s'il vous plaît.
Essayez d'utiliser un cas code> instruction CODE> pour renvoyer une colonne que vous pouvez utiliser pour déterminer la valeur pour la fonction_code_code - quand = la région 1 ore 0, puis vous pouvez utiliser Existe code> /
/
/
/
/
/
n'existe pas code> pour inclure ou exclure les lignes en fonction de l'existence de 1 et 0
Si vous souhaitez que le code SQL réelle, vous aurez besoin de fournir plus de données - vous avez mentionné quatre niveaux dans votre requête, mais ont uniquement fourni deux dans votre exemple de données. Provivife un exemple plus complet. Je suis intéressé par exemple pour comprendre comment la couche Adm3 s'applique dans votre exemple.
Je pense que l'agrégation conditionnelle em> devrait faire l'affaire. Vous pouvez filtrer des enregistrements par nom code>, puis appliquez la logique dans les fonctions d'agrégat. Si un enregistrement existe avec
Feature_Code = 'RGN' code>, vous souhaitez le sélectionner, sinon vous choisiriez le minimum
ID code> dans l'enregistrement correspondant.
| id | name | admin1 | admin2 | admin3 | feature_class | feature_code |
| -------- | -------- | ------ | ------ | ------ | ------------- | ------------ |
| 11609029 | Cornwall | ENG | | | L | RGN |