我有2张桌子。第一个保存一些购物清单的总值,第二个表保存该列表中的产品。完成购物清单后,总价值会被添加到total
表中,并附带一些信息,例如列表编号(nrList
,这是某种列表ID)和该列表上的产品数量{ {1}}当产品进入nrProducts
表时。假设有3种产品listproducts
。它们将共享相同的tomato,oranges and apples
,如前所述,它们就像是列表ID。
第一张表nrList
:
totals
第二张表CREATE TABLE IF NOT EXISTS `totals` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nrList` int(11) NOT NULL,
`nrProducts` int(11) DEFAULT NULL,
`total` double NOT NULL,
`data` date DEFAULT NULL,
`ora` time DEFAULT NULL,
`dataora` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`Operator` varchar(50) DEFAULT NULL,
`anulat` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
)
:
listproducts
现在,我有两件事我想做,它们非常相似。
假设我有一个包含3个产品的列表。在CREATE TABLE IF NOT EXISTS `listproducts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nrList` int(11) DEFAULT NULL,
`product` varchar(50) DEFAULT NULL,
`quantity` double DEFAULT NULL,
`price` double DEFAULT NULL,
`data` date DEFAULT NULL,
`operator` varchar(50) NOT NULL,
`anulat` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
表中会有一行包含一些信息,并且totals
total=10$
和nrProducts=3
。{nrList=1
1}}表格我将有3行所有listproducts
,每行都有nrList=1
。
现在,我要检查以下内容:
1.如果price=3$,3$,4$
的值,那么我在另一个表中有该列表的产品。
2.检查第一个表中的总数是否等于第二个表中的产品总和。(数量*价格SUM)
我做过一些事情,但我不知道下一步该做什么。 我设法从第二个表中获取每个列表的产品数量:
nrProducts=3
但我不知道如何在不进行两次查询的情况下比较值是否相等。
对于第二件事,我知道如何获得总和,但我不知道如何比较它们而不做两个单独的查询。
SELECT nrList,operator,COUNT(*) as count FROM listproducts GROUP BY nrList
我也可以做一些像我在其他选择中所做的事情,这不是问题。
问题是我不知道如何在一个选择中做我想要的东西,而不是做两个并比较它们。我在java中这样做,所以我可以比较,但我想知道是否以及我如何在一个查询中完成此任务。
感谢并为这篇长篇文章感到抱歉。
答案 0 :(得分:1)
您可以尝试这样的事情:
SELECT totals.nrList,
IF (totals.nrProducts = t.nrProductsActual, 'yes', 'no') AS matchNrProducts,
IF (totals.total = t.totalActual, 'yes', 'no') AS matchTotal
FROM totals INNER JOIN
(SELECT nrList,
COUNT(*) AS nrProductsActual,
SUM(quantity*price) AS totalActual
FROM listproducts
GROUP BY nrList) AS t ON totals.nrList = t.nrList