列出其他表中不包含特定值的表行

时间:2017-05-14 16:50:49

标签: mysql sql join left-join outer-join

我有2个表,我需要SQL查询女巫将选择idb,基本表中的名称排除我们没有链接的地方,例如黄色。

basic_table:
idb... name ... value 
1      color    red   
2      style    modern    

second_table
id ... idb ... second 
1      1       green
2      1       yellow
3      2       red   
4      2       blue 

结果应该是:

idb... name
2      style 

此查询将包含idp 1,因为我们将其设为绿色,但应排除。

SELECT
    `basic_table`.`idp`, `basic_table`.`name`
FROM
`basic_table`
    LEFT JOIN `second_table` 
        ON (`basic_table`.`idp` = `second_table`.`idp`)
WHERE (`second_table`.`second` NOT LIKE '%yellow%')

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用not exists轻松完成此操作:

select idb,
    name
from basic_table b
where not exists (
        select 1
        from second_table s
        where b.idb = s.idb
            and s.second = 'yellow'
        );

使用左连接:

select distinct b.idb,
    b.name
from basic_table b
left join second_table s on b.idb = s.idb
    and s.second = 'yellow'
where s.idb is null;