SQL/MS Access 2010-其中有多个条件未返回正确值
“COD_p”是用户给定的参数。 我想得到所有与COD_P匹配的值,t.FIRST不是1,t.FINAL不是1000到1100,但是返回的值不包括t.FIRST=1的项目,而不管它们是否有t.FINAL=5 例如: COD_P=1的用户输入 在塔贝,我有:SQL/MS Access 2010-其中有多个条件未返回正确值,sql,ms-access-2010,Sql,Ms Access 2010,“COD_p”是用户给定的参数。 我想得到所有与COD_P匹配的值,t.FIRST不是1,t.FINAL不是1000到1100,但是返回的值不包括t.FIRST=1的项目,而不管它们是否有t.FINAL=5 例如: COD_P=1的用户输入 在塔贝,我有: SELECT t.COD, t.ITEM, t.FIRST, t.FINAL FROM TabE t WHERE t.COD = COD_P AND t.FIRST NOT IN(1) AND t.FINAL NOT IN(1000,1100
SELECT t.COD, t.ITEM, t.FIRST, t.FINAL
FROM TabE t
WHERE t.COD = COD_P AND t.FIRST NOT IN(1) AND t.FINAL NOT IN(1000,1100)
他应该返回第二个和第三个值。问题1:中的并不意味着你似乎在使用它
要说“t.FIRST
不是1”,您应该使用t.FIRST 1
(尽管在这种情况下,您所做的可能会起作用)
要说“t.FINAL
不是1000到1100”,您应该使用t.FINAL而不是1000到1100之间的。例如,你写的东西会允许1050,这与你对你想要的东西的描述不符
问题#2:想要的逻辑不清楚
当您谈论不正确的结果时,您的意思是您只想排除FIRST为1,FINAL为1000到1100之间的记录(因为您的意思似乎是FIRST=1,FINAL=5不应该被排除)。这不是您的书面描述所说的,也肯定不是您的查询逻辑所说的。如果这是你想要的,你需要像
| COD | ITEM | FIRST | FINAL |
| 1 | 12 | 1 | 1000 |
| 1 | 12 | 1 | 2 |
| 1 | 12 | 1 | 10 |
| 1 | 12 | 1 | 1100 |
| 2 | 12 | 1 | 1000 |
| 3 | 12 | 1 | 1000 |
| 3 | 12 | 1 | 1000 |
| 4 | 12 | 1 | 1000 |
| 5 | 12 | 1 | 1000 |
由于这些条件不是可加性的,即不能一起考虑,因此可以使用或运算符:
AND NOT (FIRST = 1 AND FINAL BETWEEN 1000 AND 1100)
给定上述查询、示例数据和输入,预期结果是不返回任何记录。这不是你看到的吗?这是基于和t.FIRST NOT IN(1)
,这将排除所有样本记录。“并且不关心它们是否有t.FINAL=5。”
SELECT t.COD, t.ITEM, t.FIRST, t.FINAL
FROM TabE t
WHERE t.COD = COD_P AND (t.FIRST NOT IN(1) OR t.FINAL NOT IN(1000,1100))