【问题标题】:MySQL - matching and non-matching results in Where IN queryMySQL - Where IN 查询中的匹配和不匹配结果
【发布时间】:2019-01-18 11:49:31
【问题描述】:

我需要根据用户输入的关键字从数据库中找到匹配和不匹配的关键字。

下面是我们存储所有已知关键字的数据库架构

Table keywords
   keyword varchar

简单地找到匹配的关键字。我们使用以下查询来查找匹配的关键字

select keyword from keywords where keyword in ('abc', 'pqr', 'xyz')

其中“abc”、“pqr”、“xyz”是用户提供的关键字。

但是,我还需要找到数据库中不存在的关键字。绝对NOT IN 不起作用,因为它将返回数据库中的所有标签,而不是不匹配的标签。例如,如果数据库中存在“abc”和“pqr”而“xyz”不存在,我期望输出如下

keyword present
abc       1
pqr       1
xyz       0

请帮帮我。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以在下面尝试 - 使用 cte

    with cte1 as 
    (
    select 'abc' as key
    union 
    select 'pqr' union select 'xyz' 
    )
    select keyword,case when key is null then 0 else 1 end as is_present 
    from keywords left join cte1 on keyword=key
    

    【讨论】:

    • 有一个错误,但我明白了。我接受作为答案。
    【解决方案2】:

    选择三个关键字并使用子查询在关键字表中查找它们:

    select
      keyword,
      keyword in (select keyword from keywords) as present
    from
    (
      select 'abc' as keyword
      union all
      select 'pqr' as keyword
      union all
      select 'xyz' as keyword
    ) user_keywords
    order by keyword;
    

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 2017-03-28
      相关资源
      最近更新 更多