这个查询有什么问题?

时间:2011-07-22 00:17:05

标签: sql

即时从三个不同的表中选择数据,我想选择数据并过滤全名不要两次,并且该全名的订单数将分组为一。我尝试了这些查询,但它给了我一个错误,你能帮助我吗?

SELECT 
   `biz`.`id`, 
   `deals`.`biz_id`,
   `deals`.`id` as `deal_id`,
   `deals`.`name`, 
   `orders`.`id`,
   `users`.`username`,
   `users`.`fullname`,
   `users`.`id` as `user_id`,
   `orders`.`dealid`, 
   `orders`.`userid` ,
    COUNT(`orders`.`userid`) as `num` 
FROM 
  `deals`,
  `users`,
  `orders` 
WHERE 
  `deals`.`biz_id` = '{$User['id']}' 
  AND `orders`.`dealid` = `deal_id` 
  AND `users_id` = `deals`.`userid`

3 个答案:

答案 0 :(得分:1)

在您的陈述中,您选择的第一个字段是'biz'表中的'id'字段。但是,'biz'表不在FROM子句中。

我想我猜怎么解决它:

SELECT 
   `biz`.`id`, 
   `deals`.`biz_id`,
   `deals`.`id` as `deal_id`,
   `deals`.`name`, 
   `orders`.`id`,
   `users`.`username`,
   `users`.`fullname`,
   `users`.`id` as `user_id`,
   `orders`.`dealid`, 
   `orders`.`userid` ,
    COUNT(`orders`.`userid`) as `num` 
FROM 
  `biz`,
  `deals`,
  `users`,
  `orders` 
WHERE 
  `deals`.`biz_id` = '{$User['id']}' 
  AND `biz`.`id` = `deals`.`biz_id`
  AND `orders`.`dealid` = `deal_id` 
  AND `users_id` = `deals`.`userid`
GROUP BY `orders`.`userid

答案 1 :(得分:0)

最初的错误是因为from子句中没有名为 biz 的表格来从中选择 id 字段。

此外,此查询也将在count()函数失败,因为没有group by子句,这不是聚合函数。

答案 2 :(得分:-1)

FROM 

deals,   users,   orders

我认为你不能这样做。您需要连接表,在这种情况下,您需要两个连接来连接3个表。这将是一个更复杂的查询。