【问题标题】:SQLite - sql question 101SQLite - sql 问题 101
【发布时间】:2010-03-14 14:18:18
【问题描述】:

我会这样做:

  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"

我知道“不等于”的语法是 <>,但我得到一个空结果。

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

谢谢

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    您不能对空值使用相等运算符,您必须使用 is nullis not null

    所以你的第一个查询是:

    select * from cars_table where body is not null;
    

    没有简单 方法可以进行第二次操作(不包括为空的列)。我假设您的意思是如果该列的所有行都为 NULL,则不显示该列,因为逐行执行此操作会更加困难。 select 语句需要显示一个列列表,并且无论它们是否为空,都会忠实地显示它们。

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

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

    【讨论】:

      【解决方案2】:

      比较NULL不是用<>,而是用is nullis not null

      select * 
      from cars_table
      where body is not null
      

      还有:

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


      NULL 不是 正常 值,必须与标准值不同地处理。

      【讨论】:

      • 我希望值代表列值
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        谢谢大家的回答。

        嗯,我有一张有一堆列的表。 我将搜索一辆特定的汽车,并获取该汽车的值...

        汽车 |手册 |自动 |轿车|动力刹车| 高分辨率照片| CLIPARTO喷气发动机

        本田 |真实 |假 |假 |真实 |假的

        马自达 |假 |真实 |假 |真实 |真的

        所以,我想做-> select * from car_table where car='mazda' and values not equal to false

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

        我知道我可以通过编程来做到这一点,但我认为我可以通过 sql 来做到这一点

        【讨论】:

          猜你喜欢
          • 2020-05-17
          • 1970-01-01
          • 1970-01-01
          • 2015-06-15
          • 1970-01-01
          • 2011-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多