【发布时间】:2013-05-27 15:05:26
【问题描述】:
我是 sqlite 的新手,并且有一个填充数据库,我需要确定数据库中的任何数字生物是否具有适应度阈值水平 (fitness>=2) 并且还活着 (live=1)。我还需要排除我试图为其寻找合适伴侣的生物体的个体 ID(主键)(indivID INTEGER PRIMARY KEY)。
下面我尝试了第一行代码,但它抛出了一个 SQL 错误:
[SQLITE_ERROR] SQL 错误或缺少数据库(“CASE”附近:语法 错误)。
但是我知道错误在 SQL 语句中,因为其他函数正在成功访问数据库。
SELECT indivID FROM population CASE fitness >=2 WHEN live = 1 AND indivID!=[specific individual] ELSE NULL END
我已经尝试了下一行代码,它有效,但没有正确排除特定个人的 indivID:
SELECT [some column names] FROM [a database] WHERE fitness>=2 AND live=1 AND indivID!=[specific individual]
我有三个问题:
1) 我在上述陈述中的错误在哪里
2) 使用“case...when”和“where...and”语句有什么区别
3) 在这些查询中,可能甚至很可能没有具有足够高适应度(高于 2)的“live=1”个体有资格使用 select 语句,因此这两个查询的结果也是如此没有可行的个体(如果写得正确)则为空?
提前感谢您的帮助!
【问题讨论】:
-
您的第二个查询似乎很好。能否请您扩展一下‘没有正确排除特定个人的indivID’部分?
-
谢谢大家! @AndriyM在我重置数据库以使每个人的适应度为零并且我将一个人的适应度提高到2以便系统查询适合的伴侣(另一个适应度> = 2的人)的情况下,它报告说有一个,当我知道所有其他人都为零时。
-
如果只有一行与条件匹配,并且您指定要排除它的 ID,但查询仍然返回它,那么是的,我可以看到人们会对此感到困惑。但是你确定你没有犯错吗?也许排除的 ID 是错误的(因此服务器没有排除任何内容并返回唯一匹配的行)? Here's a simple example 匹配,我想,你描述的情况,我看不出有问题(查询没有按预期返回行)。您能否同样设置一个说明问题的测试用例?