我有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%')


任何想法?

最佳答案

您可以使用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;

关于mysql - 列出表中不包含其他表中特定值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43966514/

10-12 13:08