检查每行中的两列mysql(版本8.0.13)之间是否只存在一个空值

8ljdwjyq  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(700)

我有两列 col1 以及 col2 在表名下 table . 理想情况下,表中的数据应如下所示:

col1 | col2
  A     null
  null   B
  null   A
  C      null

如果存在两列都在其中的行,则数据将有错误 null 或者如果两列都有值。例如,如果有一行

col1| col2
  A     B

col1 | col2
 null   null

我可以使用如下查询来计算每列中的空值数
select count(*) from table where col1 IS NULL select count(*) from table where col2 IS NULL 然而,只要知道 null 把它们加起来并不能告诉我 null 表中确实存在。如果每行中只存在一个空值,我是否可以编写一个查询来测试?

ibps3vxo

ibps3vxo1#

当然。您可以使用以下方法获得正确的行数:

select sum( (col1 is null and col2 is not null) or
            (col1 is not null and col2 is null)
          ) as one_null_per_row
from t;

或:

select count(*)
from t
where (col1 is null and col2 is not null) or
      (col1 is not null and col2 is null);

(第一个版本允许您添加其他摘要。)
可以使用以下方法获取有错误的行:

select t.*
from t
where (col1 is null and col2 is null) or
      (col1 is not null and col2 is not null)
kfgdxczn

kfgdxczn2#

要查找出现错误的行数,可以使用 AND 条件来检查两列是否 null 同时,或不同时为空:

SELECT COUNT(*) AS rows_with_error
FROM your_table 
WHERE (col1 IS NULL AND col2 IS NULL) OR 
      (col1 IS NOT NULL AND col2 IS NOT NULL)

相关问题