2011-12-31 2 views
2

하나씩 두 개의 쿼리를 실행하려고합니다. 내가 seperatley라는 두 개의 쿼리를 실행할 때 그들은 원하는 정보를 제공하고 제공합니다. 내가 그들을 결합하려고 할 때 나는 어딘가에서 잘못 가고있는 것처럼 보인다. 나는 뻔뻔스럽게 뭔가 잘못하고 있다는 것을 분명히하고 있습니까?MYSQL Sub Select가 작동하지 않습니다.

SELECT 
    pd.product_id, b.product_id, basket_qty, 
    product_name, product_price, product_image, 
    pd.category_id, basket_id 
(SELECT 
    pd.product_id, b.product_id, 
    basket_session_id, 
    SUM(product_price) AS subtotal 
    FROM 
    basket b, product pd 
    WHERE 
    basket_Session_id = '9htt961lpa1kqieogd5ig5ff93' AND 
    b.product_id = pd.product_id) 
FROM 
    basket b, product pd, department dep 
WHERE 
    basket_session_id = '9htt961lpa1kqieogd5ig5ff93' 
    AND b.product_id = pd.product_id 
    AND dep.department_id = pd.category_id 

테이블 구조 -

CREATE TABLE IF NOT EXISTS `basket` (
    `basket_id` int(10) unsigned NOT NULL auto_increment, 
    `product_id` int(10) unsigned NOT NULL, 
    `basket_qty` int(10) unsigned NOT NULL default '1', 
    `basket_session_id` char(32) NOT NULL default '', 
    `basket_date` datetime NOT NULL default '0000-00-00 00:00:00', 
    PRIMARY KEY (`basket_id`), 
    KEY `product_id` (`product_id`), 
    KEY `basket_session_id` (`basket_session_id`) 
) 

CREATE TABLE IF NOT EXISTS `product` (
    `product_id` int(10) unsigned NOT NULL auto_increment, 
    `category_id` int(10) unsigned NOT NULL, 
    `department_name` varchar(100) NOT NULL, 
    `product_name` varchar(100) NOT NULL default '', 
    `product_description` text NOT NULL, 
    `product_price` decimal(7,2) NOT NULL default '0.00', 
    `product_qty` smallint(5) unsigned NOT NULL default '0', 
    `product_size` text NOT NULL, 
    `product_image` varchar(200) default NULL, 
    `product_date` datetime NOT NULL default '0000-00-00 00:00:00', 
    PRIMARY KEY (`product_id`), 
    UNIQUE KEY `product_name` (`product_name`), 
    KEY `category_id` (`category_id`) 
) 


CREATE TABLE IF NOT EXISTS `department` (
    `department_id` int(10) unsigned NOT NULL auto_increment, 
    `department_parent_id` int(11) NOT NULL default '0', 
    `name` varchar(50) NOT NULL default '', 
    `description` varchar(200) NOT NULL default '', 
    `image` varchar(255) NOT NULL default '', 
    PRIMARY KEY (`department_id`), 
    UNIQUE KEY `name` (`name`), 
    KEY `department_parent_id` (`department_parent_id`) 
) 

나는 전자 상거래 응용 프로그램에 대한 "바구니"세션을 기반으로 제품 정보를 끌어하려합니다. 한 바구니에 여러 제품이 포함될 수 있으므로 모든 제품의 총 가치 합계를 반환하고 싶습니다.

+0

첫 번째 basket_id 다음에 세미콜론이 누락 되었습니까? – danihp

+0

이것은 단순히 유효하지 않습니다 구문. 어떤 테이블 구조에서 원하는 아이디어를 선택하면 솔루션을 찾을 수 있습니까? –

+0

결과를 얻으려는 소계를 얻으려는 것 같습니다. [롤업으로] (http : //forums.mysql.com/read.php?12,106959,106959), 또 다른 방법은 변수를 사용하여 [누적 합계]를 유지하는 것입니다 (http://stackoverflow.com/questions/664700/calculate-a- running-total-in-mysql), 마지막으로 상호 연관된 하위 쿼리를 사용하는 것입니다. – xQbert

답변

0

하위 쿼리가 전체 쿼리에서 반환되는 열이기 때문에이 방법은 작동하지 않지만 하위 쿼리는 둘 이상의 열을 반환합니다. 당신은 여분의 칼럼을 제거 할 수 있으며 이렇게하면 효과가 있습니다.

SELECT pd.product_id, b.product_id, basket_qty 
     , product_name, product_price, product_image 
     , pd.category_id, basket_id 
     -- moved from sub-query 
     , basket_session_id 
     , (SELECT SUM(product_price) 
      FROM basket b, product pd 
      WHERE basket_Session_id = '9htt961lpa1kqieogd5ig5ff93' 
      AND b.product_id = pd.product_id) AS subtotal 
    FROM basket b, product pd, department dep 
WHERE basket_session_id = '9htt961lpa1kqieogd5ig5ff93' 
    AND b.product_id = pd.product_id 
    AND dep.department_id = pd.category_id 
+0

서브 쿼리는 꽤 안티 패턴입니다. 그리고 당신은'SUM()'에'GROUP BY'를 사용하지 않습니다. – Jules

+0

그 일을했습니다! 그게 문제라는 것을 몰랐습니다. 감사합니다 –

+0

@Jules 다른 열을 선택하지 않았으므로 그룹이 필요하지 않습니다. 두 번째로, 자기 자신에 대한 대안 답을 다운 투표하는 것은 약간 무례합니다. – Ben

3

당신이 바로 당신의 부속 선택하기 전에 쉼표를 추가해야합니다 .. 쿼리 나에게 유효 보이지 않는 것을 제외하고

SELECT 
    pd.product_id, b.product_id, basket_qty, 
    product_name, product_price, product_image, 
    pd.category_id, basket_id, 
(SELECT ... 

. 정확히 당신이 성취하고자하는 것은 무엇입니까? 방금 작성한 쿼리보다 더 나은 쿼리가있을 것이라고 확신합니다.

그래서 나는 당신이 성취하려는 것을 확신하지 못하고 데이터베이스가 어떻게 생겼는지 모르지만이 쿼리를 수정하여 귀하의 필요를 충족시킵니다.

SELECT pd.product_id, b.product_id, b.basket_qty, 
     pd.product_name, pd.product_price, pd.product_image, 
     pd.category_id, b.basket_id, b.basket_session_id, 
     SUM (pd.product_price) AS subtotal 
FROM product pd 
JOIN basket b ON b.product_id = pd.product_id 
JOIN department dep ON dep.department_id = pd.category_id 
WHERE b.basket_session_id = '9htt961lpa1kqieogd5ig5ff93' 
GROUP BY product_id 

은 또한 당신이 department 테이블을 사용하지만, 당신이 그것을 또는 아무것도에서 모든 필드를 선택 결코주의 사항 : 그것은 당신을 위해 좋은 시작해야한다. 그래서 여기서 쓸모없는 것 같습니다. 나중에 쿼리를 향상시키기 위해 쿼리에 추가했습니다.

관련 문제