SQLite - SQL问题101

时间:2010-03-14 14:18:18

标签: sql sqlite

我会做这样的事情:

  1. select * from cars_table where body not equal to null
  2. select * from cars_table where values not equal to null And id = "3"
  3. 我知道'not equal'的语法是<>,但我得到的结果是空的。

    对于第二部分,我想获得一个结果集,它只返回具有值的列。因此,如果值为null,则不包括该列。

    由于

4 个答案:

答案 0 :(得分:2)

您不能将等号运算符用于空值,您必须使用is nullis not null

所以你的第一个查询是:

select * from cars_table where body is not null;

没有 easy 方法来执行第二次操作(排除null的列)。我假设您的意思是如果所有行都为该列的NULL,则不显示该列,因为在逐行的基础上执行此操作会更加困难。 select语句需要显示列的列表,并忠实地显示它们是否为空。

唯一可能的想法是一系列(每列一个)选择,并使用分组来确定列是否只有空值,然后动态构造一个只包含不符合该条件的列的新查询。

但这非常混乱,完全不适合SQL - 也许如果你能告诉我们请求背后的理由,可能会有另一种解决方案。

答案 1 :(得分:0)

NULL未与<>相比,is nullis not null与<{1}}相比:

select * 
from cars_table
where body is not null

并且:

select *
from cars_table
where values is not null
    and id = '3'


NULL不是正常值,必须以不同于标准值的方式处理。

答案 2 :(得分:0)

在SQL中,NULL是未知值。它既不等于也不等于任何其他值。如果要比较的值中的任何一个是NULL,则所有比较运算符(=,&lt;&gt;,&lt;,&gt;等)都返回false。 (我不知道你多大了,所以我不能说你是24岁,但我也不能说你不是24岁。)

如前所述,在测试IS NULL值时,您必须使用IS NOT NULLNULL

答案 3 :(得分:0)

谢谢大家的回答。

好吧,我有一堆带有一堆列的表。 我将搜索一辆特定的汽车,并获得该车的价值......

汽车|手册|自动|轿车|动力制动器|喷气发动机

本田|是的|假|假|是的|假

马自达|假|是的|假|是的|真

所以,我想做 - &gt; select * from car_table,其中car ='mazda'且值不等于false

然后我只是遍历游标结果并用适当的列和值填充表格。其中值是列。我想我用*代替值

我知道我可以通过编程方式进行,但我想我可以通过sql

来做到这一点