如何为一个变量选择null,而另一个变量不为null?

时间:2014-07-16 15:17:44

标签: mysql select

我需要从数据集中选择观察结果,以排除缺少某些值但忽略其他值的行。例如,我有以下变量:

A,dateA,B,dateB,C,dateC

我需要排除A不为空的行,但是缺少dateA值或者对于B不是null,但是缺少dateB值或者对于C而言不是null,但缺少dateC值。另外,因为我的变量是结构化的,所以它们可以是空值,我一直在使用以下代码来识别" null"观察:

WHERE dateA > '';

我不确定要在我的select语句中放入什么来完成此任务。任何帮助将非常感激!谢谢!

这里的编辑将是一些示例数据:(抱歉尴尬的格式化)

Obs ---- A ----- dateA

1 -------- 3 ----- 2002-02-13 00:00:00

2 -------- 8 ----- 2009-12-19 00:00:00

3 -------- 0

4 -------- 7

我想要的结果是选择观察1,2和3,但不是4,因为它缺少dateA的值,但是有一个A值.3应该包含,因为它虽然缺少一个值对于dateA,它的A值为0.我还有其他变量,B,dateB,C和dateC需要以相同的方式选择。

2 个答案:

答案 0 :(得分:0)

这是獾吗?

SELECT *
  FROM table1 t1
 WHERE (a>0 AND dateA > '')
    OR (b>0 AND dateB > '')
    OR (c>0 AND dateC > '');

还是这个?

SELECT *
  FROM table1 t1
 WHERE (a=0 OR (a>0 AND dateA>''))
   AND (b=0 OR (b>0 AND dateB>''))
   AND (c=0 OR (c>0 AND dateC>''));

答案 1 :(得分:0)

包含这些行,我们会这样做:

WHERE (A IS NOT NULL AND A != 0 AND dateA > '') 
       OR (B IS NOT NULL AND B != 0 AND dateB > '') 
       OR (C IS NOT NULL AND C != 0 AND dateC > '');

要排除这些,我们可以简单地使用NOT:

WHERE NOT(
          (A IS NOT NULL AND A != 0 AND dateA > '') 
          OR (B IS NOT NULL AND B != 0 AND dateB > '') 
          OR (C IS NOT NULL AND C != 0 AND dateC > '')
      );

编辑:在问题澄清后更新。