Question

J'ai une table avec structure valeur d'attribut d'entité. À titre d'exemple, en tant qu'entités je peux avoir différents pays. Je peux avoir les attributs suivants:. « Situé dans », « a frontière avec », « capitale »

Alors je veux trouver tous les pays qui sont « situés en Asie » et « a la frontière avec la Russie ». La façon simple de le faire est de se joindre à la table avec elle-même d'utiliser les entités sont la colonne pour rejoindre, puis à utiliser where.

Par contre, si je dispose de 20 lignes où la Russie dans la colonne d'entité, que dans le tableau joint, j'aurai 20 * 20 = 400 lignes avec la Russie comme l'entité. Et il en est ainsi pour tous les pays. Ainsi, la table commune va être énorme.

est-il pas plus efficace d'utiliser la table d'origine pour extraire tous les pays qui se trouvent en Asie, puis d'extraire tous les pays qui ont frontière avec la Russie, puis d'utiliser ces éléments qui sont dans les deux groupes de pays?

Était-ce utile?

La solution

Vous ne devriez pas finir par avoir un grand nombre d'enregistrements si cela devrait fonctionner

SELECT  a.entity,
    a.located_in,
    a.border
FROM    my_table a
WHERE   a.border in (SELECT b.entity FROM my_table b WHERE b.entity = 'RUSSIA' )
AND     a.located_in = 'ASIA'

Autres conseils

Vous confondez avec le produit cartésien se joindre. Il pourrait y avoir jamais plus de lignes dans la jointure puis il y a dans les données réelles, la seule chose être modifié est qui éléments / lignes sont prises.

Donc, si vous avez 20 lignes russes, la table résultant de la jointure ne pourrait jamais avoir plus de 20 entrées russes.

L'opération vous suggérons d'utiliser est exactement ce que fait une jointure. Assurez-vous que vous avez les indices appropriés et laisser MySQL faire le reste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top