2016-10-20 7 views
0

私はSQLコードを探していますが、どういうことがわかりません。 これはコードですSQL同じように結合しますか?

SELECT * 
FROM dba.spro_lotesfrutagranel, 
    dba.variedades, 
    dba.productores 
WHERE (dba.variedades.espe_codigo = dba.spro_lotesfrutagranel.lote_espcod)  and 
    (dba.variedades.vari_codigo = dba.spro_lotesfrutagranel.vari_codigo) 

これは左結合と同じですか?か否か?

ありがとうございます!

+4

これは古いレガシースタイルで書かれた単純なINNER JOINです。 –

+2

これは、古い表記です。アーロン・バートランドは、「JOIN」徴候の明示的な使用を宣伝して、アーロン・バートランドは素敵な記事を書きました[古いスタイルのジョインを使って蹴る悪い習慣](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/badそれについて - 習慣から習慣への古いスタイルの結合.aspx)。 –

+1

それは単なるINNER JOINよりも、spro_lotesfrutagranelとvaryadesの間のINNER JOINです。次に、それはproductoresに交差しています – JamieD77

答えて

2

old style joinを使用しないでください! table aliasesを使用してください!あなたは、クエリのように書き直されるべき:あなたのクエリはデカルトはいくつかの場所の文で参加している今のとおり

SELECT * 
FROM dba.spro_lotesfrutagranel sl 
INNER JOIN dba.variedades v 
ON v.espe_codigo = sl.lote_espcod and 
    v.vari_codigo = sp.vari_codigo 
INNER JOIN dba.productores p 
ON p.somecolumn = ... 

spro_lotesfrutagranelvariedadesからのすべての行がproductoresからすべての行を持つ2つの列の両方、その後で接続されています。

注:2つのリンクを追加して説明します。

+0

ありがとうございます!私は誰かが書いたコードを理解しようとしています...!私は古いスタイルを使用していないよ! – CuchoAv

+0

これは単なるアドバイスです! ;)いくつかの説明と。いくつかのwhereステートメントとのデカルト結合は内部結合と似ています。 – gofr1

+0

あなたが必要とする明確化が得られたことを願っています。私はあなたが3番目のテーブルからすべての行が必要な場合は、私の答えに記載されているように、あなたのクエリのこの部分を書き換えることをお勧めクロスジョイン – gofr1

関連する問題