php - SQL 查询按列中的 null 对分组连接表进行计数

标签 php mysql sql database join

我有 3 个表 productsstock 以及 purchases

Puchases 有一个 primary keypurchaseID

我的 products 表有一个 primary key productID,然后是包含产品详细信息的列。

我的 stock 表有一个 primary keyframenumber 一个 foreign keyproductIDpurchaseID 的另一个 foriegn key

并非所有产品都有库存。

我想通过 productID join prodcuts 和 stock 表,并在最后一行计算purchaseID 列中的空值,表示我有多少库存。

我已经尝试了很多查询,但似乎总是只能得出stock 表中的条目总数或子查询 而不是左连接正确。

我尝试过的一些东西

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

只是给我按产品 ID 分组的库存中所有元素的数量,并没有加入所有产品

架构

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)

);

最佳答案

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

关于php - SQL 查询按列中的 null 对分组连接表进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13840521/

相关文章:

php - 标记系统问题 - 重复图像

php - 高容量共享媒体服务器PHP/mySQL重命名文件的实用方法

php - 让 Php 和 mysql 数据库进行通信

mysql - 曼普|本地主机 :8888 | two sites using Coda 2

sql - Rails 按 SQL 排序

sql - 使用 join 和 distinct 的 Laravel 求和查询

sql - 使用 union 将数据类型 varchar 转换为 bigint 时出错

php - 美学如何反转引号

php - 无法将数据插入 mySQL 数据库

php - Drush 站点安装 dkan 失败 - "All parts of a PRIMARY KEY must be NOT NULL"