【问题标题】:MySQL "NOT IN" query not workingMySQL“NOT IN”查询不起作用
【发布时间】:2012-02-18 18:14:48
【问题描述】:

我有一个包含三列的表:taxon_idscientific_name_element_idparent_id。我想找到是孩子而不是父母的元素,所以是结构的终点。

我发现了一些建议我使用的来源

select taxon_id 
       from  taxon_name_element
       where taxon_id not in 
                          (select parent_id from taxon_name_element)

但这不起作用,当我实际浏览条目并看到有taxon_id=1 和NO parent_id=1 时,我得到一个空集

相反,当我看到 parent_id 中的 taxon_id 时,我得到一个非空结果集

我做错了什么?我该如何解决这个问题?

【问题讨论】:

  • 感谢 ruakh,我添加了一个非空要求并且它有效。我理解正确吗?:如果将 taxon_id 与 NULL 进行比较,它返回未知,并且未知添加到任何数字都会产生未知,因此结果是没有行?感谢您的链接k
  • 是的,完全正确。像3 <> NULL 这样的东西是不确定的,因为NULL 可能是三; 3 NOT IN (1, 2, NULL) 也是如此。 MySQL 将只返回 已知 以满足 WHERE 子句的行。

标签: php mysql database subtraction


【解决方案1】:

taxon_name_element.parent_id 中有 NULL 吗?

查询...

select taxon_id 
from taxon_name_element
where taxon_id not in (
    select parent_id
    from taxon_name_element
)

...等价于...

select taxon_id 
from taxon_name_element
where
    taxon_id <> parent_id_1
    AND taxon_id <> parent_id_2
    ...
    AND taxon_id <> parent_id_N

...其中parent_id_X 是当前位于parent_id 列中的实际值。如果其中一个为 NULL,则相应的taxon_id &lt;&gt; parent_id_X 表达式将“折叠”为 NULL,并拖拽整个 WHERE 表达式。

过滤掉 NULL 以获得你想要的:

select taxon_id 
from taxon_name_element
where taxon_id not in (
    select parent_id
    from taxon_name_element
    where parent_id is not null
)

【讨论】:

    【解决方案2】:

    假设 parent_id 列是 NULL(表示没有设置值)

    选择所有对 parent_id 没有值的 scientific_name_element_id(意味着 parent_id 为 NULL)

    你这样做:

    SELECT scientific_name_element_id
    FROM YOUR_TABLE
    WHERE parent_id IS NULL
    

    这将为您提供一个没有父代的 science_name_element_id 列表。

    【讨论】:

    • 我想你一定误解了这个问题。您的查询将找到没有parent 的记录。 OP 想要查找没有 children 的记录。 (顺便说一下,表的名字是taxon_name_element。)
    猜你喜欢
    • 2013-09-18
    • 2010-10-04
    • 2012-07-28
    • 2015-09-28
    • 2013-02-03
    • 2014-09-16
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多