Microsoft Access で次のクエリを作成しました。
SELECT p.artnbr AS [Number],
p.name AS Name,
s.sizename AS Sizes,
s.sizeindex AS SizeIndex,
s.oid AS SizeId,
l.name AS LocationName,
(SELECT od.quantity
FROM orderdetails od
WHERE od.ORDER = (SELECT o.oid
FROM [order] o
WHERE o.active = -1
AND o.location = l.oid)
AND od.productsize = s.oid) AS Quantity
FROM [size] AS s
INNER JOIN (product AS p
INNER JOIN (favorite AS f
INNER JOIN location AS l
ON f.customer = l.customer)
ON p.oid = f.product)
ON p.oid = s.product
WHERE f.customer = @customer
以下のリンクは、私が使用したテーブルとそれらの関係を示しています。 https://dl.dropbox.com/u/18377860/QueryTables.png
このクエリは正しい結果を返しますが、ご覧のとおり、サブクエリを使用して数量を取得しています。その長いサブクエリの代わりに、結合ステートメントを使用してこのクエリを書き直す方法がわかりません。どんな助けでも大歓迎です。
よろしく
編集:より明確にするために、私のクエリは、[注文] があるかどうかに関係なく、(製品、サイズ、場所) のすべての一意の組み合わせを取得し、注文数量を表示する必要があります。特定の組み合わせの注文が存在しない場合、数量は null にする必要があります。
EDIT2:クエリを作成できましたが、次のようになります。
SELECT p.ArtNbr AS [Number],
p.Name AS Name,
s.SizeName AS Sizes,
s.SizeIndex AS SizeIndex,
s.Oid AS SizeId,
l.Name AS LocationName,
so.qty AS Quantity
FROM ([Size] AS s
INNER JOIN (Product AS p
INNER JOIN (Favorite AS f
INNER JOIN Location AS l
ON f.Customer = l.Customer) ON p.OID = f.Product)
ON p.OID = s.Product)
LEFT JOIN
(SELECT od.ProductSize AS PS,
od.Quantity AS qty,
o.Location as Location
FROM OrderDetails AS od INNER JOIN [Order] AS o ON od.Order = o.OID
WHERE o.Active = -1) AS so ON so.PS = s.OID
WHERE f.Customer = @customer AND (l.OID = so.Location OR so.Location is null)
マットが言ったように、サブクエリを FROM セクションに移動し、派生テーブルの選択クエリに ProductSize と Location を含め、結果を「Size」テーブルにリンクし、最後に where セクションに条件を追加しました各ロケーションの同じレコードの繰り返しを排除します。