2011-12-31 9 views
2

2つのクエリを1つに実行しようとしています。両方のクエリを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`) 
) 

私はeコマースアプリケーションのための「バスケット」のセッションに基づいて製品情報をプルしようとしています。バスケットに複数の製品が含まれている可能性があるため、私はすべての製品から合計価値の合計を返します。

+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テーブルを使用しますが、あなたはそれか何かから任意のフィールドを選択したことがないことに気づく:それはあなたのために良いスタートでなければなりません。だからここで役に立たないようだ。後でそれを改善したい場合に備えて、クエリに追加しました。

関連する問題