MYSQL子选择不工作

MYSQL子选择不工作,mysql,Mysql,我试图在一个查询中运行两个查询。当我分别运行这两个查询时,它们会工作并为我提供所需的相关信息。当我试图将它们结合起来时,我似乎在某个地方出了问题。是否有明显的事情表明我做错了 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.p

我试图在一个查询中运行两个查询。当我分别运行这两个查询时,它们会工作并为我提供所需的相关信息。当我试图将它们结合起来时,我似乎在某个地方出了问题。是否有明显的事情表明我做错了

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

我正在尝试根据电子商务应用程序的“篮子”会话提取产品信息。由于篮子可以包含多个产品,我想返回所有产品的总价值之和。

请确保在子选择之前添加逗号

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

还要注意,您使用的是
部门
表,但从未从中选择任何字段或任何内容。所以在这里似乎没用。我只是在我的查询中添加了它,以备您以后需要改进。

这不起作用,因为子查询实际上是在整个查询中返回的一列,但是,您的子查询返回多个列。不过,您可以删除额外的列并执行此操作,这应该是可行的

 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

第一个id后缺少分号?这根本不是有效的语法。给我们一个想法,你想从什么样的表结构中选择什么将帮助我们为你找到一个解决方案。你似乎在试图获得结果的小计。实现这一点的一种方法是使用,另一种方法是使用变量来保持,最后一种方法是使用相关子查询。你能缩小问题的范围吗?删除所有我确信不需要提问的字段。子查询几乎是一种反模式。而且你的
SUM()
没有使用
groupby
。这样做了!我没有意识到这就是问题所在。这是有道理的,因为我想我是返回约4列的子。。。Thanks@Jules我不需要分组方式,因为我没有选择任何其他列。其次,否决自己的备选答案有点粗鲁。@Jules:为什么子查询是反模式的?它们是SQL语言的基石。@Jules,你可以看到答案还没有被编辑。我可以用数据库中的跟踪文件证明,对于数据库来说,子查询在各个方面都可以更快更好;两周前我花了一个小时在一个问题上,因为在那种情况下,它对我来说毫无意义。做一个笼统的陈述并不意味着它是正确的。