【问题标题】:SQL Query - Filtering out column values with NoneSQL 查询 - 用无过滤掉列值
【发布时间】:2016-08-09 04:41:50
【问题描述】:

我有一个名为 raw 的 PSQL 数据库,其中一列是 option,类型为 VARCHAR。该值为“Call”、“Put”或 None。

我想选择选项字段的值不是“Call”或“Put”而是“None”的所有行。

但是,当我运行此查询时:

curr.execute('SELECT * FROM holdings h WHERE option != \'Call\' AND option != \'Put\';')

没有返回任何东西

如果我跑步:

curr.execute('SELECT * FROM holdings h WHERE option != \'Call\';')

我只得到选项值 = 'Put' 的那些行

如何获得带有 None 选项的行,而不只是做一个设置的差异。理想情况下,我希望能够只选择那些不是“Call”和“Put”的行,而不会与所有行以及那些具有“Call”和“Put”的行不同

感谢您的帮助!

【问题讨论】:

  • 是的,实际字段是 None,当我创建数据库时,如果 'Put' 和 'Call' 不是值,我将 None 作为默认值
  • 以后我应该把 null 作为值吗?
  • 考虑使用is distinct from 而不是!=

标签: python sql postgresql psycopg2


【解决方案1】:

如果您想选择带有null 选项的行,您必须通过option IS NULL 指明这一点:

SELECT * FROM holdings WHERE option IS NULL

你可以用option NOT IN ('Call', 'Put')代替option != 'Call' AND option != 'Put'

SELECT * FROM holdings WHERE option NOT IN ('Call', 'Put')

并与OR一起加入:

SELECT * FROM holdings WHERE option NOT IN ('Call', 'Put') OR option IS NULL

【讨论】:

    【解决方案2】:
    SELECT * FROM holdings h WHERE option =''
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 2022-11-11
      • 2014-03-31
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2011-03-21
      相关资源
      最近更新 更多