我有兩個表的產品和stock_mvt複雜Mysql的查詢來生成報告
CREATE TABLE `products` (
`product_id` int(11) NOT NULL AUTO_INCREMENT,
`product_name` varchar(50) NOT NULL,
`category_id` int(11) DEFAULT NULL,
`inventory` int(11) NOT NULL DEFAULT '0',
`product_price` decimal(10,2) NOT NULL DEFAULT '0.00',
`obs` varchar(50) NOT NULL,
PRIMARY KEY (`product_id`),
KEY `category_id` (`category_id`),
CONSTRAINT `products_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `categories` (`category_id`))
ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=latin1
CREATE TABLE `stock_mvt`
( `mvt_id` int(11) NOT NULL AUTO_INCREMENT,
`trans_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`product_id` int(11) NOT NULL,
`stock_plus` int(11) NOT NULL,
`stock_minus` int(11) NOT NULL,
PRIMARY KEY (`mvt_id`),
KEY `product_id` (`product_id`),
CONSTRAINT `stock_mvt_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`product_id`))
ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=latin1
我想要生成每日報告收集:,Stock_plus,stock_minus,庫存前後 PRODUCT_ID,PRODUCT_NAME,PRODUCT_PRICE,庫存。 我有很多查詢的執行,讓剛剛看到最後的:
SELECT
product_name,
inventory - ifnull(sum(stock_mvt.stock_minus) , 0)
- ifnull(sum(stock_mvt.stock_plus), 0) AS InventoryBF
FROM
products
LEFT JOIN stock_mvt
ON products.product_id = stock_mvt.product_id
WHERE
date(stock_mvt.trans_date) < "2012-02-23"
GROUP BY
products.product_name
要使庫存之前和
SELECT
product_name,
inventory - ifnull(sum(stock_mvt.stock_minus) , 0)
- ifnull(sum(stock_mvt.stock_plus) , 0) AS InventoryAf
FROM
products
LEFT JOIN stock_mvt
ON products.product_id = stock_mvt.product_id
WHERE
date(stock_mvt.trans_date) <= "2012-02-23"
GROUP BY
products.product_name
有後的庫存,這兩個MySQL查詢給我的不僅僅是產品當天股票變動,我想所有的產品即使是0動作第二個問題,我不能做聯合所有我的疑問,所以我的問題是:請問,有沒有更好的辦法讓我做我的查詢我的報告與我想要顯示的所有數據?謝謝
在第二個SQL語句刪除日期()預選賽我認爲'<='應該是'> ='。 – user1027167 2012-03-13 15:30:01
謝謝,但sql語句是好的,正如我所說的我的問題是如何把它們全部一起並獲得所有產品清單 – 2012-03-13 19:58:41