比较两个表的值

时间:2014-03-13 00:05:18

标签: java mysql sql

我有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中这样做,所以我可以比较,但我想知道是否以及我如何在一个查询中完成此任务。

感谢并为这篇长篇文章感到抱歉。

1 个答案:

答案 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