Mysql 重用左连接的问题会导致WHERE和ORDERBY子句

Mysql 重用左连接的问题会导致WHERE和ORDERBY子句,mysql,sql,Mysql,Sql,我不能在条件和订购时使用sa。注意。为什么? (我删除了标记的部分,查询工作正常!) 我必须在查询中更改什么?如果你能解释一下,那就太好了 您将外部联接放在您的WHERE标准中,这是在否定您的外部联接。将其移动到您的JOIN,您将获得您的NULL记录: SELECT s.*, u.username, u.fullname, c.title AS ctitle, c.description AS cdescription, sa.attention, sp.popularity, COUNT(DI

我不能在条件和订购时使用
sa。注意
。为什么? (我删除了标记的部分,查询工作正常!)


我必须在查询中更改什么?如果你能解释一下,那就太好了

您将
外部联接
放在您的
WHERE
标准中,这是在否定您的
外部联接。将其移动到您的
JOIN
,您将获得您的
NULL
记录:

SELECT s.*,
u.username,
u.fullname,
c.title AS ctitle,
c.description AS cdescription,
sa.attention,
sp.popularity,
COUNT(DISTINCT f.id) AS favorites,
COUNT(DISTINCT st.id) AS stars,
COUNT(DISTINCT v.id) AS views
FROM shots s
INNER JOIN users u ON u.id = s.user_id
INNER JOIN categories c ON c.id = s.cat_id
LEFT OUTER JOIN(
    SELECT shot_id, round(AVG(count),2) AS attention
    FROM points 
    WHERE date > DATE_SUB(CURDATE(),INTERVAL 2 DAY)
    GROUP BY shot_id
) sa ON sa.shot_id = s.id
LEFT OUTER JOIN(
    SELECT shot_id, SUM(count) AS popularity
    FROM points 
    GROUP BY shot_id
) sp ON sp.shot_id = s.id
LEFT OUTER JOIN favorites f ON f.shot_id = s.id
LEFT OUTER JOIN stars st ON st.shot_id = s.id
LEFT OUTER JOIN views v ON v.shot_id = s.id
**WHERE s.library = 1 AND sa.attention > 40
ORDER BY sa.attention DESC
LIMIT 0,50**
GROUP BY s.id

第二个音符,
groupby
不能放在末尾。我也把它移到了正确的位置。

你把它放在你的
WHERE
标准中,就是在否定你的
外部连接。将其移动到您的
JOIN
,您将获得您的
NULL
记录:

SELECT s.*,
u.username,
u.fullname,
c.title AS ctitle,
c.description AS cdescription,
sa.attention,
sp.popularity,
COUNT(DISTINCT f.id) AS favorites,
COUNT(DISTINCT st.id) AS stars,
COUNT(DISTINCT v.id) AS views
FROM shots s
INNER JOIN users u ON u.id = s.user_id
INNER JOIN categories c ON c.id = s.cat_id
LEFT OUTER JOIN(
    SELECT shot_id, round(AVG(count),2) AS attention
    FROM points 
    WHERE date > DATE_SUB(CURDATE(),INTERVAL 2 DAY)
    GROUP BY shot_id
) sa ON sa.shot_id = s.id
LEFT OUTER JOIN(
    SELECT shot_id, SUM(count) AS popularity
    FROM points 
    GROUP BY shot_id
) sp ON sp.shot_id = s.id
LEFT OUTER JOIN favorites f ON f.shot_id = s.id
LEFT OUTER JOIN stars st ON st.shot_id = s.id
LEFT OUTER JOIN views v ON v.shot_id = s.id
**WHERE s.library = 1 AND sa.attention > 40
ORDER BY sa.attention DESC
LIMIT 0,50**
GROUP BY s.id

第二个音符,
groupby
不能放在末尾。我也把它移到了正确的位置。

你把它放在你的
WHERE
标准中,就是在否定你的
外部连接。将其移动到您的
JOIN
,您将获得您的
NULL
记录:

SELECT s.*,
u.username,
u.fullname,
c.title AS ctitle,
c.description AS cdescription,
sa.attention,
sp.popularity,
COUNT(DISTINCT f.id) AS favorites,
COUNT(DISTINCT st.id) AS stars,
COUNT(DISTINCT v.id) AS views
FROM shots s
INNER JOIN users u ON u.id = s.user_id
INNER JOIN categories c ON c.id = s.cat_id
LEFT OUTER JOIN(
    SELECT shot_id, round(AVG(count),2) AS attention
    FROM points 
    WHERE date > DATE_SUB(CURDATE(),INTERVAL 2 DAY)
    GROUP BY shot_id
) sa ON sa.shot_id = s.id
LEFT OUTER JOIN(
    SELECT shot_id, SUM(count) AS popularity
    FROM points 
    GROUP BY shot_id
) sp ON sp.shot_id = s.id
LEFT OUTER JOIN favorites f ON f.shot_id = s.id
LEFT OUTER JOIN stars st ON st.shot_id = s.id
LEFT OUTER JOIN views v ON v.shot_id = s.id
**WHERE s.library = 1 AND sa.attention > 40
ORDER BY sa.attention DESC
LIMIT 0,50**
GROUP BY s.id

第二个音符,
groupby
不能放在末尾。我也把它移到了正确的位置。

你把它放在你的
WHERE
标准中,就是在否定你的
外部连接。将其移动到您的
JOIN
,您将获得您的
NULL
记录:

SELECT s.*,
u.username,
u.fullname,
c.title AS ctitle,
c.description AS cdescription,
sa.attention,
sp.popularity,
COUNT(DISTINCT f.id) AS favorites,
COUNT(DISTINCT st.id) AS stars,
COUNT(DISTINCT v.id) AS views
FROM shots s
INNER JOIN users u ON u.id = s.user_id
INNER JOIN categories c ON c.id = s.cat_id
LEFT OUTER JOIN(
    SELECT shot_id, round(AVG(count),2) AS attention
    FROM points 
    WHERE date > DATE_SUB(CURDATE(),INTERVAL 2 DAY)
    GROUP BY shot_id
) sa ON sa.shot_id = s.id
LEFT OUTER JOIN(
    SELECT shot_id, SUM(count) AS popularity
    FROM points 
    GROUP BY shot_id
) sp ON sp.shot_id = s.id
LEFT OUTER JOIN favorites f ON f.shot_id = s.id
LEFT OUTER JOIN stars st ON st.shot_id = s.id
LEFT OUTER JOIN views v ON v.shot_id = s.id
**WHERE s.library = 1 AND sa.attention > 40
ORDER BY sa.attention DESC
LIMIT 0,50**
GROUP BY s.id
第二个音符,
groupby
不能放在末尾。我也把它移到了正确的位置