0

J'ai deux relations, emp(id,name) et emp2(name,city,salary) avec des valeurs:naural jointure est de donner le produit cartésien de deux relations

enter image description here

et la relation des valeurs EMP2: enter image description here

Comme vous pouvez le voir, quand je courir naturel rejoindre entre eux, je reçois leur produit cartésien. Mais pourquoi, puisqu'ils ont un attribut commun (name)?

+0

joindre à la clause out vous donnera le produit cartésien des lignes –

+0

pouvez-vous élaborer –

+0

Vous * obtenez * la jointure naturelle, pas la jointure cartésienne. Que pensez-vous que vous devriez obtenir? [mcve] PS [Veuillez ne pas utiliser d'images/liens lorsque vous pouvez utiliser du texte.] (https://meta.stackoverflow.com/questions/285551/why-not-upload-images-of-code-on-so- when-ask-a-question/285557 # 285557) Couper et coller tout ce texte s'il vous plaît. – philipxy

Répondre

0

Vous avez deux fois la même valeur dans la colonne commune (nom) afin que cela reprenne les lignes plus de temps. Votre jointure naturelle est basée sur la table qui n'a pas de valeur unique chaque ligne. Ensuite, dans ce cas, vous obtenez toujours plus qu'une ligne pour chaque entrée (également avec jointure interne) mais vous pouvez résoudre en utilisant distincts

select dictinct emp.*, emp2.* 
from emp 
inner join emp2 on emp.name = emp2.name 

ou

select select dictinct emp.*, emp2.* 
from emp2 natural join emp 
+0

Je n'ai qu'un attribut commun qui est "id" –

+0

vous votre img je vois la table emp2 avec l'id et le nom ... même nom = attributs communs – scaisEdge

+0

Je pense que vous avez mal compris s'il vous plaît voir la requête ci-dessus la relation de résultat qui est emp2 –

0

select * from rejoindre emp intérieure emp2 sur emp.id = emp2.id

+0

Cela ne répond pas à la question. – philipxy

1

Vous êtes obtenir la jointure naturelle, pas produit cartésien.

Une copie de chaque colonne commune et une copie de chaque colonne sont uniques à une table d'entrée. Il y a une ligne pour chaque combinaison différente d'une ligne de la table d'entrée de gauche et d'une rangée d'une table d'entrée de droite. Si une valeur de sous-programme (('kim')) pour les colonnes communes (name) apparaît n fois dans la table de gauche (2 fois) et m fois dans la table de droite (2 fois), elle apparaîtra n fois m fois dans la sortie (2 fois 2 fois = 4 fois)

produit cartésien Un SQL aurait des colonnes name, city, salary, id & name et aurait une ligne pour chaque combinaison différente d'une ligne de la table d'entrée gauche et une ligne d'une table d'entrée droite.

Cela inclut toutes les combinaisons possibles d'une valeur name de la table de gauche et de la table de droite. Mais pour cet exemple de données, il n'y a que une valeurname sur les deux tables, donc chaque paire de valeurs de nom doit avoir cette valeur deux fois.

La jointure naturelle est la même chose que le produit cartésien suivi de la restriction sur l'égalité des colonnes communes, suivie de la projection d'une colonne commune suivie de la conservation de lignes distinctes.