Mysql 如果来自左连接 table 的子行不存在,则查询忽略该行

Mysql query ignoring the row if child row from left join table doesn't exists

您好,首先,我不是 mysql 查询方面的专家。我有 tables wp_postswp_wti_like_post 并且我在 wp_wti_like_post ON wp_posts.ID = wp_wti_like_post.post_idSUM(wp_wti_like_post.value) < 2 上做 LEFT JOIN 但是如果有 no rowin wp_wti_like_post with post from wp_posts 然后它甚至不显示来自 wp_posts 的行并且只是忽略它,请帮助这个真的需要它。

查询:

SELECT * 
FROM wp_posts
LEFT JOIN wp_wti_like_post ON wp_posts.ID = wp_wti_like_post.post_id
WHERE wp_posts.post_status =  'publish'
GROUP BY wp_wti_like_post.post_id
HAVING SUM( wp_wti_like_post.value ) <2
OR SUM( wp_wti_like_post.value ) = NULL 
LIMIT 0 , 200

table wp_wti_like_post

http://prntscr.com/6xixrd

table wp_posts

http://prntscr.com/6xixzp

您可能需要将查询重组为如下形式:

SELECT * FROM
(
    SELECT WP.*, SUM(LP.value) AS `value`
    FROM wp_posts WP
    LEFT JOIN 
        (SELECT post_id FROM wp_wti_like_post WHERE post_status = 'publish') LP
        ON WP.ID = LP.post_id
    GROUP BY WP.ID
) T1
WHERE T1.value IS NULL
OR T1.value < 2;

最内层的查询首先只获取已发布的 wti_like_posts 个。

然后执行左连接,这将为您提供从 wp_posts 中获取所有行的预期结果,即使它们没有与子查询中的记录连接。

执行后,GROUP 语句执行对值求和的计算。

最外层查询强制要求总和必须小于 2 或为空。

所以我自己解决了这个问题并以这种方式工作

的地方
SUM( wp_wti_like_post.value ) = NULL 

应该是

SUM( wp_wti_like_post.value ) IS NULL