我有两张 table 。第一个表保存一些购物 list 的总值(value),第二个表保存该列表中的产品。完成购物 list 后,总值(value)将与 list 编号(nrList
是某种 list ID)和编号等信息一起添加到 total
表中该列表中的产品数 nrProducts
,同时产品进入 listproducts
表。假设有 3 个产品番茄、橙子和苹果
。它们将所有共享相同的nrList
,如前所述,它类似于列表ID。
第一个表总计
:
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
:
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`)
)
现在,我有两件事想做,它们非常相似。
假设我有一个包含 3 种产品的列表。在 totals
表中,会有一行包含一些信息和 total=10$
nrProducts=3
和 nrList=1
。在 listproducts
表中,我将有 3 行,全部具有 nrList=1
并且每行都有 price =3$,3$,4$
。
现在,我想要检查以下内容:
1.如果 nrProducts=3
的值,那么我在另一个表中有该列表的产品。
2.检查第一个表中的总和是否等于第二个表中的产品总和。(数量*价格SUM)
我已经做了一些事情,但我不知道下一步该做什么。 我设法使用以下命令从第二个表中获取每个列表的产品数量:
SELECT nrList,operator,COUNT(*) as count FROM listproducts GROUP BY nrList
但我不知道如何在不执行两次查询的情况下比较值是否相等。
对于第二件事,我知道如何获得总和,但我不知道如何在不执行两个单独查询的情况下比较它们。
SELECT SUM(price*quantity) FROM `listproducts` WHERE nrList='10' and operator like '%x%'
我也可以做类似我在其他选择中所做的事情,这不是问题。
问题是我不知道如何在一个选择中做我想要的事情,而不是做两个并比较它们。我在java中做这个,所以我可以比较,但我想知道是否以及我如何在单个查询中做到这一点。
感谢并抱歉发了这么长的帖子。
最佳答案
你可以尝试这样的事情:
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
关于java - 比较两个表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366501/