2014-03-13 182 views
0

我有2个表。第一个保存一些购物清单的总价值,第二个表保存该清单中的产品。当一个购物清单与像列表号的一些信息(nrList这是某种形式的表ID)和产品该列表nrProducts上的号码进行加总价值为total表在一起,同时产品进入listproducts表。可以说有3个产品tomato,oranges and apples。他们都会共享相同的nrList,正如前面提到的,它就像列表ID一样。比较两个表的值

第一个表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

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 products.In的totals表名单会有一些信息一行,并与total=10$nrProducts=3nrList=1。在listproducts表我将有3行均具有nrList=1且各自具有price=3$,3$,4$。 现在,我要检查以下内容: 1.That如果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%' 

我也可以做一些事情,就像我在其他选择中所做的一样,这不是问题。

的问题是,我不知道该怎么做我想做的事情在一个单一的选择,而不是做两个比较them.I'm在Java中这样做,这样我可以比较,但我想知道如果我能在单个查询中做到这一点。

感谢和抱歉的长期职位。

回答

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 
+0

酷,发现了一些新的东西,感谢您!谢谢 ! –