2016-07-10 6 views
0

私はSQLベースに関する講義でこの部分に少し問題があります。 私はそれがあまりよく説明されていないと思うし、私はインターネット上の良い情報を見つけるのに苦労している。私の本では、それは言う:「ほとんどオールウェイズ2組の属性が明示的に結合述部によってリンクされていない場合はエラーである:」 そして、この例:明示的に参加するものを説明しこれらのSQLクエリには正確に何がありません

SELECT s.Name, c.Name AS Contact, c.Phone 
FROM Suppliers AS s, ContactPersons AS c 
WHERE s.Name = 'Shop Rite' 
AND c.Phone LIKE '+49 351%' 

いいえ述語があります。私の場合、この例はうまく見えます。ブックが言うように、[OK]参加です

SELECT s.Name, c.Name AS Contact, c.Phone 
FROM Suppliers AS s, ContactPersons AS c 
WHERE s.SuppID = c.SuppID 

: はあらかじめsimilair例がありました。私は実際に違いが何であり、JOIN-Predicateは正確に何かを理解していませんか?

また、私は事前に

Thxを(私はネイティブスピーカーではないよ)任意の文法・ミスのため申し訳ありません!

+0

古いスタイルのjoinはwhere句と "join xyandz ON blah blah"のどちらかを意味します。 – Drew

+1

常に明示的な 'JOIN'構文を使用します。 'FROM'節では昏睡を使わないでください。 –

答えて

1

暗黙的には、結合構文を:

SELECT * 
FROM Table1 , Table2 
WHERE Table1.id = Table2.id 

明示的な結合構文:

SELECT * 
FROM Table1 
JOIN Table2 
ON Table1.id = Table2.id 

暗黙の構文は結構です、それは動作しますが、それは示唆していません。これは構文を混乱させ、多くの間違いを招くことがあります.2つ以上のテーブルを扱うときや、LEFT JOIN(愚かなプラス記号)が必要なときがほとんどです。適切な結合構文のみを使用することを習慣として行うべきです。ここで

LEFT JOIN Sを組み合わせた6つのテーブルとクエリの例です。

SELECT <columns> 
FROM YourTable,AnotherTable,ThirdTable,FourthTable,AnotherTable2,AnotherTable3 
WHERE YourTable.id = AnotherTable.id(+) AND 
     YourTable.sec_id = AnotherTable.Sec_Id(+) AND 
     AnotherTable.id (+) = ThirdTable.id(+) AND 
     YourTable.id = FourthTable.id AND 
     FourthTable.Date = ... 
     ....... 

あなたが見ることができるように、私は多くの条件があるかもしれないと仮定すると、条件の半分も入れていないとそれはうんざりのように見えます。

+0

最初の暗黙的な結合述部が機能せず、2番目のものがなぜ機能するのか教えてください。私はまだその部分を取得しないでください。今の答えのためのThx、それは本当にたくさんの私を助けてくれました –

+0

働かないとどういう意味ですか?エラーが発生しましたか? @TilmanZuckmantel – sagi

+0

私の本で言う、それはナンセンスにつながる –

関連する問題