2012-04-20 5 views
0

2つのテーブルからデータをフェッチしようとしていますが、条件に一致するすべてのレコードを取得していないようです。SQLクエリがすべてをフェッチしない

これは私のクエリです:

SELECT Parts."Part Number",Parts."Description",Parts."Location",Parts."Qty In Stock",Parts."LastCost",Parts."Cost Price",Parts."Retail Price",Transact."Type" 
FROM Transact 
INNER JOIN Parts 
ON Transact."PartNumber"=Parts."Part Number" 
WHERE Transact.Type = 'Non-stock Purch' 

私はそれに対して「非在庫購買」を持つすべてのレコードを引き出した後、部品データベースからその部分の説明を引っ張るしようとしている、それゆえ、なぜI 「説明」、「コスト」、「最終コスト」などが含まれている

私は実行する場合には、必要なすべての情報を取得するつもりはない意味のクエリで間違った何かをやっている:

select * from transact x 
where x.Type = 'Non-stock Purch' 
order by x.PartNumber 

これは268個のレコードを返します。前のクエリと同じ番号を返しますが、実際には111を返します。

また、これらのクエリを間違って書いている場合、または書式設定が正しくない場合は、教えてください。

ありがとうございました。

+0

「LEFT JOIN」を試して、もう一度268レコードを取得するかどうかを確認してください。そうであれば、実際には他のテーブルのトランザクションごとに一致するレコードはありません。 – mellamokb

+0

データがPartsテーブルにもあることを既に確認していますが、INNER JOINの代わりにLEFT JOINを使用した場合はどうなりますか?予想される行数を返しますか? – Tuan

答えて

2

Transactテーブルのレコードに一致するレコードがPartsテーブルにない可能性があります。あなたはINNER JOINをしています。部品にTransactのレコードに表示される部品番号のレコードがない場合、行は返されません。

すべてのレコードをTransactに、Partsのデータが存在する場合はLEFT JOINを実行することができます。一致していない場合は、Partsのすべての列が結果にNULLになります。

関連する問題