仅当其联接记录存在于其他表中时才获取记录

时间:2014-02-26 08:10:54

标签: mysql sql join

我有两个表用于组和类别我希望返回组和类别,不包括那些没有任何类别的组,这是我写的SQL:

SELECT 
    cat_group.subject as group_name , spcat . *
FROM
    special_event_groups AS cat_group
        LEFT JOIN
    special_event_categories AS spcat ON cat_group.id = spcat.group_id
        AND cat_group.partner_id = spcat.partner_id;

它返回我的组记录,其中NULL值没有任何类别。我需要使用子查询吗?

2 个答案:

答案 0 :(得分:2)

您需要做的是将LEFT JOIN更改为JOIN

SELECT 
    cat_group.subject as group_name , spcat . *
FROM
    special_event_groups AS cat_group
JOIN
    special_event_categories AS spcat ON cat_group.id = spcat.group_id
    AND cat_group.partner_id = spcat.partner_id;

如果未满足加入条件,LEFT JOIN会显示special_event_groups中的行,并在NULL的所选列中附加special_event_categories个值。另一方面,JOINJOIN条件未满足时永远不会返回行。您可以阅读@MMMoose评论以获取更多信息。

答案 1 :(得分:1)

您也可以使用OUTER LEFT JOINLEFT JOINJOIN,这取决于您的数据库版本。

试试这个:

SELECT 
    cat_group.subject as group_name , spcat . *
FROM
    special_event_groups AS cat_group
       // LEFT JOIN, OUTER LEFT JOIN, JOIN
    special_event_categories AS spcat ON cat_group.id = spcat.group_id
WHERE cat_group.partner_id IS NULL;

让我知道它是否有效