2014-03-13 5 views
0

테이블이 2 개 있습니다. 첫 번째는 일부 쇼핑 목록의 총 가치를 보유하고 두 번째 표는 해당 목록의 제품을 보유합니다. 쇼핑 목록이 완료되면 목록 번호 (nrList은 일종의 목록 ID 임)와 해당 목록의 제품 수 nrProducts과 같은 일부 정보와 함께 total 테이블에 합계 금액이 추가되고 제품은 listproducts 테이블로 이동합니다 . 상품명이 tomato,oranges and apples 인 제품이 3 개 있다고 가정 해 봅시다. 앞서 말했듯이, 모두 목록 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 :

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`) 
) 

지금, 내가하고 싶은 두 가지를 가지고, 그들은 매우 유사하다. 가 약간의 정보와 행 수와 listproducts 테이블 .IN total=10$nrProducts=3nrList=1 내가 모든 nrList=1을 갖는 각각 price=3$,3$,4$을 가진 3 개 행이 뜻합니다 내가 3 products.In totals 테이블 목록을 가지고 말할 수 있습니다. 자, 내가 다음과 같은 수표를 원한다 : 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%' 

내가 다른 선택에서 수행 한 것과 같은 작업을 수행 할 수도 있습니다. 이것은 문제가 아닙니다.

문제는 두 가지 일을하는 대신 하나의 선택에서 원하는 작업을 수행하는 방법을 모르겠다는 것입니다. 자바에서이 작업을 수행하므로 비교할 수 있지만 알고 싶습니다. 만약 내가 어떻게 하나의 쿼리 에서이 작업을 수행 할 수 있습니다.

긴 게시물을 보내 주셔서 감사 드리며 죄송합니다.

답변

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

쿨, 당신에게 몇 가지 새로운 물건 감사를 발견! 감사 ! –

관련 문제