SQL/MS Access 2010 - 多个条件未返回正确值
SQL/MS Access 2010 - where with multiple conditions not returning proper values
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)
"COD_P" 是用户给定的参数。
我想获取匹配 COD_P 且 t.FIRST 不是 1 且 t.FINAL 不是 1000 到 1100 的所有值,但 returned 值不包括项目t.FIRST = 1,而不关心 t.FINAL = 5.
示例:
COD_P = 1
的用户输入
在 TabE 中,我有:
| 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 |
他应该return给我第二个和第三个值。
问题 #1:IN
并不代表您使用它的目的。
要说“t.FIRST
不是 1”,您应该只使用 t.FIRST <> 1
(尽管在这种情况下您所做的可能有效)。
要说“t.FINAL
不是 1000 到 1100”,您应该使用 t.FINAL NOT BETWEEN 1000 AND 1100
。例如,您写的内容将允许 1050 - 这与您对您想要的内容的描述不符。
问题 #2:所需的逻辑不清楚
当您谈论不正确的结果时,您是在暗示您只想排除 FIRST 为 1 AND FINAL 在 1000 和 1100 之间的记录(因为您似乎意味着不应排除 FIRST=1,FINAL=5)。那不是您的书面描述所说的,当然也不是您的查询逻辑所说的。如果那是你想要的,你需要像
这样的东西
AND NOT (FIRST = 1 AND FINAL BETWEEN 1000 AND 1100)
由于条件不可加,即不能一起考虑,您可以使用 or
运算符:
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))
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)
"COD_P" 是用户给定的参数。 我想获取匹配 COD_P 且 t.FIRST 不是 1 且 t.FINAL 不是 1000 到 1100 的所有值,但 returned 值不包括项目t.FIRST = 1,而不关心 t.FINAL = 5.
示例: COD_P = 1
的用户输入在 TabE 中,我有:
| 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 |
他应该return给我第二个和第三个值。
问题 #1:IN
并不代表您使用它的目的。
要说“t.FIRST
不是 1”,您应该只使用 t.FIRST <> 1
(尽管在这种情况下您所做的可能有效)。
要说“t.FINAL
不是 1000 到 1100”,您应该使用 t.FINAL NOT BETWEEN 1000 AND 1100
。例如,您写的内容将允许 1050 - 这与您对您想要的内容的描述不符。
问题 #2:所需的逻辑不清楚
当您谈论不正确的结果时,您是在暗示您只想排除 FIRST 为 1 AND FINAL 在 1000 和 1100 之间的记录(因为您似乎意味着不应排除 FIRST=1,FINAL=5)。那不是您的书面描述所说的,当然也不是您的查询逻辑所说的。如果那是你想要的,你需要像
这样的东西AND NOT (FIRST = 1 AND FINAL BETWEEN 1000 AND 1100)
由于条件不可加,即不能一起考虑,您可以使用 or
运算符:
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))