如何在mysql内部连接后获取剩余的行

时间:2014-09-10 06:17:45

标签: mysql inner-join

我有两张桌子

1.Applicants表(id,name)

2.posts table(id,post_name,applicant_id)

如果我进行内部联接,我将会收到有帖子的申请人({COID} applicants posts posts applicant_id applicants id {{1}} {1}}。{{1}})。

现在我需要做些什么才能找到没有任何帖子的申请人。

3 个答案:

答案 0 :(得分:2)

您需要outer joinHAVING子句

SELECT
      a.id
    , COUNT(p.applicant_id) post_count
FROM applicants a
      LEFT OUTER JOIN posts p
                  ON a.id = p.applicant_id
GROUP BY
      a.id
HAVING COUNT(p.applicant_id) = 0

实际上你不需要分组,这就足够了:

SELECT
      a.id
FROM applicants a
      LEFT OUTER JOIN posts p
                  ON a.id = p.applicant_id
WHERE p.applicant_id IS NULL

答案 1 :(得分:0)

如果您需要没有帖子的申请人,那么您需要这个

SELECT
      a.* 
FROM applicants a
      LEFT OUTER JOIN posts p
                  ON a.id = p.applicant_id
WHERE p.applicant_id IS NULL

当您必须显示有帖子的申请人时,您需要将LEFT OUTER JOIN更改为INNER JOIN。

如果您需要两个不关心申请人的帖子,那么左连接将适合您

SELECT
          a.*,p.* 
    FROM applicants a
          LEFT OUTER JOIN posts p
                      ON a.id = p.applicant_id 

注意: - *必须更改列名以获得最佳做法。

答案 2 :(得分:0)

试试这个:

select a.id,count(p.applicant_id) 
from applicants a left outer join posts p
ON a.id=p.applicant_id
where p.post_name is null
group by a.id