如果左连接表中的子行不存在,则忽略该行的Mysql查询

时间:2015-04-24 08:00:08

标签: php mysql wordpress left-join

您好,首先,我不是mysql查询的专家。我有wp_postswp_wti_like_post两个表,我LEFT JOINwp_wti_like_post ON wp_posts.ID = wp_wti_like_post.post_id SUM(wp_wti_like_post.value) < 2,但no row wp_wti_like_post来自wp_posts的ID为{1}}的{​​1}},它甚至不会显示来自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

表wp_wti_like_post

http://prntscr.com/6xixrd

表wp_posts

http://prntscr.com/6xixzp

2 个答案:

答案 0 :(得分:0)

您可能需要重新构建查询,如下所示:

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语句将执行SUMming值的计算。

最外层查询强制要求sum必须小于2或为null。

答案 1 :(得分:0)

所以我把自己整理出来并以这种方式运作

的地方
SUM( wp_wti_like_post.value ) = NULL 

它应该是

SUM( wp_wti_like_post.value ) IS NULL