lorsque vous utilisez x.name=y.name
vous comparez le nom du pays de x avec le nom du pays de y, si les deux instances ont le même nom de pays. Cela reviendrait simplement à vous renvoyer la table complète x.
Vous souhaitez utiliser x.continent=y.continent
car vous ne souhaitez comparer le nom d'une instance de x qu'avec le nom d'une instance de y si le même continent se trouve dans le même pays.
Permettez-moi d'illustrer cette étape par étape avec un exemple: Ici, nous avons un monde de table et je peuplé avec des données:
world:
Select x.continent, x.name
From world x
ORDER BY name
continent name
Asia Afghanistan
Europe Albania
Africa Algeria
Europe Andorra
Africa Angola
SouthAmerica Bolivia
SouthAmerica Brazil
Europe Hungary
Asia Japan
Africa Nigeria
SouthAmerica Peru
Asia Taiwan
lorsque vous exécutez cette requête sans la clause WHERE dans votre sous-requête:
Select x.continent, x.name
From world x
Where x.name <= ALL (select y.name from world y)
ORDER BY name
vous obtenez ce
continent name
Asia Afghanistan
C'est bec ause the where clause filtré tous sauf un pays
where x.name <= (Afghanistan,Taiwan,Japan,
Albania,Hungary,Algeria,Nigeria,Andorra,
Angola,Bolivia,Peru,Brazil)
et à savoir, le nom de pays qui vient en premier dans l'ordre alphabétique qui est l'Afghanistan.
mais étant donné que nous voulons obtenir le premier pays chaque continent nous ajouterons x.continent=y.continent
à notre sous-requête
Select x.continent, x.name
From world x
Where x.name <= ALL (select y.name from world y where x.continent=y.continent)
ORDER BY name
ce qui se passe est en dessous que maintenant nous ne comparons le nom du pays d'une instance de x avec le nom de pays d'une instance de y s'ils partagent le même continent. Il faut donc utiliser continent de l'Asie par exemple:
Japen obtient filtré parce Japan <= All(Afghanistan,Taiwan,Japan)
est faux puisque le Japon n'est pas inférieure ou égale à l'Afghanistan (A vient avant J)
Taiwan obtient filtré parce Taiwan <= All(Afghanistan,Taiwan,Japan)
est faux depuis Taïwan n'est ni inférieur ni égal à l'Afghanistan.
Afghanistan ne soit filtré parce que Afghanistan <= All(Afghanistan,Taiwan,Japan)
n'est vrai que l'Afghanistan est égale à l'Afghanistan
Cependant, si vous utilisez x.name=y.name
dans votre sous-requête, vous êtes essentiellement la comparaison de chaque pays à lui-même et ils auront tous inclus dans votre ensemble de résultats définitifs, car tous les noms de pays sont égaux au nom de pays lui-même.
J'espère que cette aide et bienvenue à Stack Overflow. Si cette réponse ou une autre solution a résolu votre problème, veuillez le marquer comme accepté. "
Vous devez fournir plus de contexte pour votre question.Quel résultat es-tu en train d'essayer de faire que "ça" doit être "x.continent = y.continent'"? Est-ce parce que lorsque vous utilisez 'x.name = y.name' vous n'obtenez pas le résultat souhaité? ou est-ce parce que vous obtenez une erreur? S'il vous plaît soyez précis sur votre question. –
@ O.KOO Si j'utilisais x.name = y.name, la réponse serait incorrecte. – teamking12
bien, quelle est votre réponse/résultat souhaité? –