1

と の3 つのテーブルがproductsあります。stockpurchases

Puchasesprimary keyの_ purchaseID_

productsのテーブルには、製品の詳細を含む列がありますprimary keyproductID

stockのテーブルにはのprimary keyframenumberforeign keyproductIDあります。foriegn keypurchaseID

すべての商品に在庫があるわけではありません。

在庫表をで作成しjoin、列の null 値の量をカウントする行を最後に配置します。これは、在庫の数を表します。prodcutsproductIDpurchaseID

私はたくさん試しましたが、常にテーブルqueries内のエントリの合計量が表示されるか、正しく結合されていないようです。stocksubqueries

私が試したいくつかのこと

SELECT * , COUNT( * ) AS Count
FROM Products
LEFT JOIN Stock ON Products.productID = Stock.productID
WHERE Stock.OrderID IS NULL AND Stock.framenumber IS NOT NULL
GROUP BY Products.productID

productID でグループ化された在庫のすべてのオブジェクトの数を表示するだけで、すべての製品に参加するわけではありません

スキーマ

CREATE TABLE BikeStock (

FrameNumber VARCHAR(10) PRIMARY KEY,
BikeCode VARCHAR(40),
OrderID INT,
FOREIGN KEY (BikeCode) REFERENCES Bike(BikeCode),
FOREIGN KEY (OrderID) REFERENCES Purchase(OrderID)
);

CREATE TABLE Bike (

BikeCode VARCHAR (40) PRIMARY KEY,
Manufacturer VARCHAR (30),
Model VARCHAR (30),
SubType VARCHAR (30),
Year SMALLINT,
FrameMaterial VARCHAR (20),
Description TEXT,
Gender VARCHAR (6),
Type VARCHAR (20),
Price DECIMAL (11,2)
);


CREATE TABLE Purchase (

DateOfPurchase DATETIME,
OrderID INT NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(OrderID),
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID)

);
4

1 に答える 1

2
SELECT Products.productID , SUM( 
case 
   when  (Stock.OrderID IS NULL AND Stock.framenumber IS NOT NULL) 
      then 1 
      else 0 
end case
) AS Count
FROM Products
LEFT JOIN Stock ON Products.productID = Stock.productID
GROUP BY Products.productID
于 2012-12-12T13:25:01.993 に答える