加入问题

时间:2012-12-03 13:23:07

标签: mysql sql join

我有以下查询,其中我使用了JOIN s。它说:

  

未知栏m.bv ..

请你看一看,告诉我我做错了什么?

$query4 =  'SELECT u.*, SUM(c.ts) AS total_sum1, SUM(m.bv) AS total_sum 
FROM users u 
LEFT JOIN 
 (SELECT user_id ,SUM(points) AS ts FROM coupon GROUP BY user_id) c 
 ON u.user_id=c.user_id 
LEFT JOIN 
 (SELECT user_id ,SUM(points) AS bv FROM matching GROUP BY user_id) r 
ON u.user_id=m.user_id 
where u.user_id="'.$_SESSION['user_name'].'"
GROUP BY u.user_id';

3 个答案:

答案 0 :(得分:1)

您正在使用别名SUM(points) AS bv从表格中选择r,没有包含别名m的表格。所以它必须是r.bv而不是这样:

SELECT 
  u.*, 
  SUM(c.ts) AS total_sum1, 
  SUM(r.bv) AS total_sum 
FROM users u 
LEFT JOIN 
(
    SELECT 
      user_id,
      SUM(points) AS ts 
    FROM coupon 
    GROUP BY user_id
) c ON u.user_id=c.user_id 
LEFT JOIN 
(
    SELECT 
      user_id,
      SUM(points) AS bv 
     FROM matching 
     GROUP BY user_id
) r ON u.user_id = m.user_id 
where u.user_id="'.$_SESSION['user_name'].'"
GROUP BY u.user_id

答案 1 :(得分:0)

用r代替m。看第二个加入

答案 2 :(得分:0)

您使用r将派生表别名,然后使用m引用该表(两次)。纠正一个或另一个。

由于您在两个子查询中按user_id进行分组,而user_id是(我假设)表user的主键,因此您不需要最终的GROUP BY }。

如果它适用于所有(很多)用户,我会这样写:

SELECT u.*, COALESCE(c.ts, 0) AS total_sum1, COALESCE(m.bv, 0) AS total_sum 
FROM users u 
LEFT JOIN 
 (SELECT user_id, SUM(points) AS ts FROM coupon GROUP BY user_id) c 
   ON u.user_id = c.user_id 
LEFT JOIN 
 (SELECT user_id, SUM(points) AS bv FROM matching GROUP BY user_id) m  
   ON u.user_id = m.user_id

并且在你的(一个用户)案例中这样:

SELECT u.*, COALESCE(c.ts, 0) AS total_sum1, COALESCE(m.bv, 0) AS total_sum 
FROM users u 
  LEFT JOIN 
     (SELECT SUM(points) AS ts FROM coupon
      WHERE user_id = "'.$_SESSION['user_name'].'") c 
    ON TRUE 
  LEFT JOIN 
     (SELECT SUM(points) AS bv FROM matching
      WHERE user_id = "'.$_SESSION['user_name'].'") m
   ON TRUE 
WHERE u.user_id = "'.$_SESSION['user_name'].'"

最后一个查询也可以简化为:

SELECT u.*, 
     COALESCE( (SELECT SUM(points) FROM coupon 
                WHERE user_id = u.user_id)
             , 0) AS total_sum1,
     COALESCE( (SELECT SUM(points) FROM matching 
                WHERE user_id = u.user_id)
             , 0) AS total_sum 
FROM users u 
WHERE u.user_id = "'.$_SESSION['user_name'].'"
相关问题