Mysql 与联接有关的问题

Mysql 与联接有关的问题,mysql,sql,join,Mysql,Sql,Join,我有以下查询,其中我使用了JOINs。它说: 未知列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

我有以下查询,其中我使用了
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';

如果从别名为
r
的表中选择
SUM(points)AS bv
,则没有别名为
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

用r代替m。查看第二个Join

您用
r
为派生表添加了别名,并用
m
引用该表(两次)。纠正其中一个

由于您在两个子查询中按
user\u id
分组,并且
user\u id
是(我假设)表
user
的主键,因此您实际上不需要最后的
分组

如果是为所有(许多)用户编写的,我会这样写:

在您(一个用户)的情况下:

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

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'].'"
查询中没有表“m”。请不要使用大写字母
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'].'"