【问题标题】:NOT IN is not working in MYSql. and Not Exists not giving proper resultNOT IN 在 MYSql 中不起作用。并且不存在没有给出正确的结果
【发布时间】:2021-08-20 19:18:45
【问题描述】:
  1. 尝试使用 not in() 函数获取不包含 NULL 或 '' 字符串的记录但无法正常工作。请提出任何建议。

     select * 
     from table 
     where colm1 = 'xyz' 
       and colm2 not in (NULL, '') 
       and id = 268594; 
    
  2. 在第二种情况下,我有表 A 和 B。表 B 可以有多个记录映射到一个表 A 记录。我想在表 B 上执行 where 子句。如果记录可用,则需要检查值不为空或为空。如何在不执行 2 次选择查询的情况下执行:

表 A:

a_id name
1 "xyz"

表 B:

B_id type value A_id
1 "x" "abd" 1
2 "y" "cdv" 1

因此,如果表 B 中不存在类型为 "x and A_id" =1 的记录,则希望选择表 A 的记录,如果存在,则仅当值为 NULL 或 '' 时才选择表 A 记录。

我尝试了这些查询,但它们不起作用:

select * 
from A 
where not exists (select * 
                  from B 
                  where type = 'x' 
                    and value = null 
                     or value = '' 
                    and A_id = a_id); 

【问题讨论】:

  • 一共有多少个问题?
  • 有两个问题。我提到了 1 和 2。
  • 把它们分成2个问题比较容易
  • 是的。每个帖子一个问题。

标签: mysql not-exists notin


【解决方案1】:
 select * 
 from table 
 where colm1 = 'xyz' 
   and colm2 not in (NULL, '') 
   and id = 268594; 

Try using IS NOT NULL and <> '',例如:

 select * 
 from table 
 where colm1 = 'xyz' 
   and colm2 IS NOT NULL AND colm2<>''
   and id = 268594; 

【讨论】:

  • 即使我的值是 '',它也正在恢复记录。 colm2 IS NOT NULL AND colm2'' 此行将不起作用,因为 colm2 不能同时具有两个值。
  • 那么,colm2 值是什么?空间?非打印字符?
  • colm2 有 "abc" varchar 类型
  • 让我再试一次。您说查询“不起作用”。我将“不工作”解释为“查询返回 colm2 为空或为空的结果”。我在问 colm2 是 actually null 还是空,还是只是 appear 为 null 或空 - 即实际上是否有空格或非打印字符。
  • 它是空的,你可以说像''这样的空字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多