2017-12-13 9 views
1

enter image description here外部結合を使用してSQLで3つのテーブルを結合するにはどうすればよいですか?

私はこれらの3つのテーブルを結合して、特定の会社が提供する製品の名前と価格を記載しようとしています。

自然な結合を使用しようとしましたが、正しい出力が得られていないようです。 (私は3行が返されることを期待していますが、私はそれ以上を取得しています)

すべての答えをここで私は内部結合を使用することを示唆しているが、私は、行

おかげ

のすべての組み合わせを取得する必要はありません。

編集:

SELECT Pieces.Name, Provides.Price 
FROM Pieces 
JOIN Provides JOIN Providers 
WHERE Providers.Name LIKE "Honda"; 

を私は何の結果

を取得していない上記のクエリでは:私が書いた

クエリ

下の写真は、私が enter image description here

+2

あなたの持っているものそれで運賃を試した? – MaxZoom

+2

既存のクエリは表示できますか?あなたは3行を期待していると言いますが、それはなぜ具体的にですか?実際に何も提供していないプロバイダ、または何も提供していない作品を含める場合を除いて、これは内部結合状況のように見えます。 –

+0

こんにちは。 '内部結合 'は、' on'で与えられた条件に制限された 'cross join'行(すべての組み合わせ)です。 'join'は' inner'がなく 'inner join'です。 'where'は' join'の後ろにある 'on'のようなものです。 MySQLは、 '' in''を '' join''を '' on'することなく '' join''を許可します。それは、実装/実行のための処方箋ではなく、結果の*記述です。それが私たちがクエリを書く方法です。 「私はすべての組み合わせを望んでいません」と誤解されています。 PS "私は試しました"& "私が期待した"私たちに何も言わなかった。私は "結果がない"とは "行がない結果"を意味すると思います。はっきりしてください。何が起こったかを示してください。 (あなたの例のように)[mcve] – philipxy

答えて

1

を期待していた結果を示して、私は、彼らがどのように動作するかのあなたの心の中で、より明確な区別を描画する目的で、加入について少しお話したいと思います:

INNER JOINは「行のすべての組み合わせ」にはなりません - これはCROSS JOINの機能です

OUTER JOINはすべての値(ソリッドテーブル)を持つテーブルが1つあり、それを他のテーブルに結合する必要がある場合に便利です必ずしもソリッドテーブルに関連する行がないテーブル - これらは疎テーブルです(データの穴)。外部結合には、左、右、および完全の3つの味があります。左と右は同じですが、テーブルの順序に応じて適切なキーワードを選択するだけです。基本的にa left join bb right join aは同じものになります。左/右のキーワードは、あなたが頑丈であるとみなすテーブルを宣言し、スパースとみなします。

ソリッドテーブルとスパーステーブルのペアを内部結合すると、結果の一部の実線が削除され、疎行と関連する実線のみが残ります。外部結合はすべての実線を表し、空のセルは一致する疎行が見つかりません

Natural JOINは、テーブルがどのように関係しているかを明示的に指定しないJOINです。両方のテーブルの名前。ナチュラルジョインを使用しないでください。ほとんどの場合、ちょっと愚かなアイデアや、何時間ものキーストロークを保存する意味のない「最適化」があります。

ここでのクエリは外部JOINを必要としません。あなたは...それはだた会社から提供されている作品を知りたい述べるだけ

SELECT c.* FROM 
    Provider r 
    JOIN Provides s ON r.code = s.provider 
    JOIN Pieces c ON c.code = s.piece 
WHERE 
    R.Name = 'Mattel' 

編集: Philipxyは、キーワードは「固体」と「まばらな」数学で特定の意味を持つ合理的なポイントを作っており、私は、ここで数学の特定の側面をドラッグするのではなく、コンセプトを伝えるためにここで使用していることを指摘したいと思います。理解したいと思っているので、私は古典的に学習者が概念を把握するのに簡単な方法を見つけたので、私はこのように物事について議論するつもりだと思ったが、これらは本質的にはデータベースの形あなたが使用している/使用しているキーワードを使用している場合は、あなたが何を言っているのかを理解することができます。特定の方法で理解する。その場合、数学的な意味ではなく、一般的に受け入れられている英語の意味で単に「固体」と「希薄」を使用している場合は、同様の免責事項を追加する必要があります。

+0

助けと説明のおかげで.. SQL JOINSは私に混乱していましたが、その説明ですべての混乱がなくなりました – aspire29

+0

あなたはこのブログの投稿が好きかもしれません - https://blog.codinghorror.com/a-visual-explanation -of-SQL-joins/ –

+0

@ aspire29&CaiusJardこのリンクは混乱しています。 [INNER JOIN]と[OUTER JOIN]の違いは何ですか?](https://stackoverflow.com/q/38549/3404097)と[SQL Server 2008のCROSS JOINとINNER JOIN]のコメントと回答を参照してください。 (https://stackoverflow.com/q/17759687/3404097)。 – philipxy

関連する問題