代码之家  ›  专栏  ›  技术社区  ›  Austin Adams

Python:sqlite或语句

  •  2
  • Austin Adams  · 技术社区  · 15 年前

    有或sqlite语句吗?我一直在尝试谷歌搜索,但谷歌似乎在过滤掉 或者 .

    例如,如果我想在这张桌子上找到某人(人)

    people:
    +--fname--+--lname--+--has_squirrel--+
    |Eric     |Schmidt  |0               |
    +---------+---------+----------------+
    |Elvis    |Presley  |1               |
    +---------+---------+----------------+
    |Richard  |Stallman |0               |
    +---------+---------+----------------+
    

    名字不是猫王就是理查德,我的问题是什么?

    我试过像 select * from people where fname=('Elvis' or 'Richard') ,但那总是会回来 埃里克·施密特 (与我想要的完全相反的一排)!

    我也试过 select * from people where fname='Elvis' or 'Richard' 但那又回来了 全部的 桌子上的几行!

    我在Ubuntu 10.10上使用Python 2.6sqlite3模块。有人能快速解释一下SQLite或STATION,或者告诉我它不存在吗?我试过无线电调频,但什么也找不到(搜索 或者 在sqlite网站上吐出一堆错误!).

    谢谢!

    5 回复  |  直到 15 年前
        1
  •  20
  •   Vincent Savard Midhun    15 年前

    它将是其中之一:

    SELECT * FROM people WHERE fname IN ('Elvis', 'Richard');
    SELECT * FROM people WHERE fname = 'Elvis' OR fname = 'Richard';
    

    我很惊讶你的第一个问题居然有效,在你的第二个问题中, or 'Richard' 基本上是指 or 1=1 ,这对表中的每一行都是正确的。

    你的电脑不像你那样思考。即使 fname = 'Elvis' or 'Richard' 对你来说似乎显而易见,RDBMS不知道你的意思,它会读到“如果fname等于‘Elvis’或者。。。是的”。它将字符串求值为布尔值,我假设因为它不是空的,所以它被求值为真。然后继续从表中选择每一行,如我前面所说。

        2
  •  3
  •   salezica    15 年前

    “SQLite逻辑运算符”是我的查询,发现您: http://zetcode.com/databases/sqlitetutorial/expressions/

    至于你的实际结果,你是在比较牛和驴:D.当你说:

    select * from people where fname='Elvis' or 'Richard'
    

    你是说:

    把那些人 满足以下条件:确实 fname等于Elvis,或者是真的 理查德。

    你得到了所有的行,因为Richard被认为是真的,是一个非空字符串。

    你应该做的是:

    select * from people where fname='Elvis' or fname='Richard'
    

    干杯!

        3
  •  0
  •   Andrew Hare    15 年前

    试试这个:

    select * from people where fname = 'Elvis' or  fname = 'Richard'
    
        4
  •  0
  •   James Anderson    15 年前

    或是返回true或false的逻辑语句。

    所以(“猫王”或“理查德”)的返回可能是错误的。 而实际的SQL实际上是“fname=False”。大多数数据库都会抛出错误,但由于sqlite在内部遵循TCL的“一切都是字符串”原则,因此它是一个有效的语句。

    你需要的只是:

    select * from people where fname='Elvis' or fname =  'Richard'
    
        5
  •  0
  •   BenDog    7 年前

    快一点,你试过了吗 select * from people where fname='Elvis' or fname='Richard'