【问题标题】:List rows of table not containing specific value in other table列出不包含其他表中特定值的表行
【发布时间】:2017-05-14 16:50:49
【问题描述】:

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

有什么想法吗?

【问题讨论】:

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


    【解决方案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;
    

    【讨论】:

    • 谢谢。第一个查询有效,但第二个查询无效(它仍在显示第一行)。
    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2021-04-04
    相关资源
    最近更新 更多