あなたがそのサイトでこのクエリを実行した場合:あなたは右端の列を見れば
| productline | productName | buyprice | buyprice | productName |
|--------------|-------------------------------------|----------|----------|-------------------------------------|
| Classic Cars | 1958 Chevy Corvette Limited Edition | 15.91 | (null) | (null) |
| Classic Cars | 1982 Lamborghini Diablo | 16.24 | 15.91 | 1958 Chevy Corvette Limited Edition |
| Classic Cars | 1966 Shelby Cobra 427 S/C | 29.18 | 15.91 | 1958 Chevy Corvette Limited Edition |
| Classic Cars | 1970 Plymouth Hemi Cuda | 31.92 | 15.91 | 1958 Chevy Corvette Limited Edition |
| Classic Cars | 1961 Chevrolet Impala | 32.33 | 15.91 | 1958 Chevy Corvette Limited Edition |
だから、あなたは「1958シボレーが表示されます。
SELECT
a.productline, a.productName, a.buyprice, b.buyprice, b.productName
FROM products a
LEFT JOIN products b ON a.productline = b.productline
AND b.buyprice < a.buyprice
ORDER BY
a.productline, b.buyprice, a.buyprice, b.productName
LIMIT 5
あなたはこの結果を得ますコルベット限定版 "を何回も繰り返した。これは
- 製品テーブル自体と比較されているため
- 条件
a.productline = b.productline
は「クラシックカー」と照合されている「クラシックカー」を意味加入(これは呼ばれて「自己への参加」)である(とそう)各PRODUCTLINE値のために)そうALL「クラシックカー」b
からa
(でEACH「クラシックカー」と比較され、あなたが道によって行の多くと多くを得ます。
- 次いで、a.buypriceはa.buyprice未満でなければならないb.buyriceと比較されます。しかし、最も安い車($ 15.91)には、その最も安い価格よりも低い一致する行があることができないので、
LEFT JOIN
は一致していない行を結果に含め、b
の列はその最も安い車の行に対してNULLです。
- は次に
where clause
は(これらは最も安いa.buypriceを見つけることに関心のあるように)b.productcode
は任意の値を持つすべての行
したがってだけ安い(最も低い)価格が記載されている任意の列からの除去しますb
IS NULL
| productline | productName | buyprice | buyprice | productName |
|--------------|-------------------------------------|----------|----------|-------------------------------------|
| Classic Cars | 1958 Chevy Corvette Limited Edition | 15.91 | (null) | (null) |
WHERE句を削除し、SELECT *を使用します。LEFT JOINの動作を確認します。 –