, поэтому я пытаюсь создать систему инвентаризации с 4 таблицами
tblItem
idItem name
------ -----
1 VGA
2 Mouse
3 Keyboard
tblInvoice
idInvoice date idUser
---------- ----- ------
1 2020-02-23 1
2 2020-02-24 2
tblInvoice_Item
idInvItem pcs idItem idInvoice
--------- ---- ------- ----------
1 20 1 1
2 15 2 1
3 20 1 2
4 10 2 2
tblStock
idStock pcs date idItem
--------- ---- ------- ----------
1 50 2020-02-23 1
2 15 2020-02-24 1
3 20 2020-02-23 2
4 10 2020-02-24 2
5 10 2020-02-25 1
6 30 2020-02-25 2
Ожидаемый результат:
date idItem name openingStock sales closingStock
--------- ------- ---- ------ ------ -----------
2020-02-23 1 VGA 50 20 30
2020-02-23 2 Mouse 20 15 5
2020-02-23 3 Keyboard 0 0 0
2020-02-24 1 VGA 45 20 15
2020-02-24 2 Mouse 15 10 5
2020-02-24 3 Keyboard 0 0 0
2020-02-25 1 VGA 25 0 25
2020-02-25 2 Mouse 35 0 35
2020-02-25 3 Keyboard 0 0 0
или, если вы предпочитаете ...
-- phpMyAdmin SQL Dump
-- version 4.6.6deb5
-- https://www.phpmyadmin.net/
--
-- Host: localhost:3306
-- Generation Time: Feb 27, 2020 at 04:24 PM
-- Server version: 10.3.17-MariaDB-0+deb10u1
-- PHP Version: 7.3.11-1~deb10u1
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
--
-- Database: `test`
--
-- --------------------------------------------------------
--
-- Table structure for table `tblInvoice`
--
CREATE TABLE `tblInvoice` (
`idInvoice` int(11) NOT NULL,
`date` date NOT NULL,
`idUser` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `tblInvoice`
--
INSERT INTO `tblInvoice` (`idInvoice`, `date`, `idUser`) VALUES
(1, '2020-02-23', 1),
(2, '2020-02-24', 2);
-- --------------------------------------------------------
--
-- Table structure for table `tblInvoice_Item`
--
CREATE TABLE `tblInvoice_Item` (
`idInvItem` int(11) NOT NULL,
`pcs` int(11) NOT NULL,
`idItem` int(11) NOT NULL,
`idInvoice` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `tblInvoice_Item`
--
INSERT INTO `tblInvoice_Item` (`idInvItem`, `pcs`, `idItem`, `idInvoice`) VALUES
(1, 20, 1, 1),
(2, 15, 2, 1),
(3, 20, 1, 2),
(4, 10, 2, 2);
-- --------------------------------------------------------
--
-- Table structure for table `tblItem`
--
CREATE TABLE `tblItem` (
`idItem` int(11) NOT NULL,
`name` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `tblItem`
--
INSERT INTO `tblItem` (`idItem`, `name`) VALUES
(1, 'VGA'),
(2, 'Mouse'),
(3, 'Keyboard');
-- --------------------------------------------------------
--
-- Table structure for table `tblStock`
--
CREATE TABLE `tblStock` (
`idStock` int(11) NOT NULL,
`pcs` int(11) NOT NULL,
`date` date NOT NULL,
`idItem` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `tblStock`
--
INSERT INTO `tblStock` (`idStock`, `pcs`, `date`, `idItem`) VALUES
(1, 50, '2020-02-23', 1),
(2, 25, '2020-02-24', 1),
(3, 30, '2020-02-25', 1),
(4, 100, '2020-02-23', 2);
--
-- Indexes for dumped tables
--
--
-- Indexes for table `tblInvoice`
--
ALTER TABLE `tblInvoice`
ADD PRIMARY KEY (`idInvoice`);
--
-- Indexes for table `tblInvoice_Item`
--
ALTER TABLE `tblInvoice_Item`
ADD PRIMARY KEY (`idInvItem`),
ADD KEY `idItem` (`idItem`),
ADD KEY `idInvoice` (`idInvoice`);
--
-- Indexes for table `tblItem`
--
ALTER TABLE `tblItem`
ADD PRIMARY KEY (`idItem`);
--
-- Indexes for table `tblStock`
--
ALTER TABLE `tblStock`
ADD PRIMARY KEY (`idStock`),
ADD KEY `idItem` (`idItem`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `tblInvoice`
--
ALTER TABLE `tblInvoice`
MODIFY `idInvoice` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT for table `tblInvoice_Item`
--
ALTER TABLE `tblInvoice_Item`
MODIFY `idInvItem` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT for table `tblItem`
--
ALTER TABLE `tblItem`
MODIFY `idItem` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
--
-- AUTO_INCREMENT for table `tblStock`
--
ALTER TABLE `tblStock`
MODIFY `idStock` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- Constraints for dumped tables
--
--
-- Constraints for table `tblInvoice_Item`
--
ALTER TABLE `tblInvoice_Item`
ADD CONSTRAINT `tblInvoice_Item_ibfk_1` FOREIGN KEY (`idItem`) REFERENCES `tblItem` (`idItem`),
ADD CONSTRAINT `tblInvoice_Item_ibfk_2` FOREIGN KEY (`idInvoice`) REFERENCES `tblInvoice` (`idInvoice`);
--
-- Constraints for table `tblStock`
--
ALTER TABLE `tblStock`
ADD CONSTRAINT `tblStock_ibfk_1` FOREIGN KEY (`idItem`) REFERENCES `tblItem` (`idItem`);
Я пытаюсь сделать что в http://sqlfiddle.com/#! 9 / b7e880a / 2 , но мой запрос суммирует все tblStock и tblInvoice_Item вместо ожидаемого результата выше. Я больше не имею понятия о желаемом результате выше. И я хотел, чтобы я мог получить результат из диапазона дат, например с 2020-02-23 до 2020-02-24.
Мой запрос:
select item.idItem, item.name, s.itemIn, ii.itemOut, (s.itemIn - ii.itemOut) as closing
FROM tblItem item
LEFT JOIN
(SELECT sum(pcs) as itemIn, idItem
FROM tblStock GROUP BY idItem) s ON item.idItem = s.idItem
LEFT JOIN
(SELECT sum(pcs) as itemOut, idItem
FROM tblInvoice_Item GROUP BY idItem) ii ON item.idItem = ii.idItem
Если мой дизайн плохой, пожалуйста, руководство мне, как справиться с этим. Спасибо за поддержку.