0

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

これは私の質問です:

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'

「在庫なしの購入」があるすべてのレコードをプルしてから、パーツデータベースからそのパーツの説明をプルしようとしているので、「説明」、「コスト」、「最終コスト」などを含めたのはなぜですか。 。

次のコマンドを実行すると、クエリで何か間違ったことをしているので、必要な情報がすべて取得されないということです。

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

これは268レコードを返します、私の前のクエリは同じ数を返すはずですが、実際には111を返すだけです、私はそれらが必要なように他のテーブル内に存在することを知っています(私は(何かがうまくいかなかった場合に備えて)チェックしました)。

また、これらのクエリを間違って記述している場合、またはフォーマットが正しくない場合は、お知らせください。

ありがとう。

4

2 に答える 2

1

パーツテーブルに、トランザクトテーブルのレコードと一致するレコードがない可能性があります。あなたは内部結合を行っています。Transactのレコードに表示される部品番号を持つレコードがPartsにない場合、行は返されません。

Transactのすべてのレコードと、存在する場合はパーツからのデータが必要な場合は、LEFTJOINを実行できます。一致するものがない場合、Partsのすべての列が結果でnullになります。

于 2012-04-20T20:31:21.727 に答える
0

あなたのテーブルには、Transactテーブルのレコードと一致するレコードがない可能性があると思います。

于 2012-04-20T20:56:34.093 に答える