0

我正在使用带有 VB.NET/ODBC 的 PostgreSQL,并且必须构造一个有点复杂的查询字符串。
这是简化版:

SELECT dtbl_id, idx, name, meas, code, year FROM mytable WHERE name ILIKE 'nemo%' <-edited AND (dtbl_id BETWEEN 1 AND 9999)
OR (dtbl_id BETWEEN 15000 AND 19999) ORDER BY name

我也尝试:

AND (dtbl_id BETWEEN 1 AND 9999)
AND (dtbl_id BETWEEN 15000 AND 19999) 按名称排序

我尝试获取以“nemo”开头的名称,但前提是它们的索引介于 1 和 9999 之间,索引介于 15000 和 19999 之间。在这两种情况下,我都没有得到想要的结果(如果有的话)。

我的查询有什么问题?

4

2 回答 2

1

尝试:

SELECT dtbl_id, idx, name, meas, code, year 
FROM mytable 
WHERE name ILIKE '%nemo'
AND ((dtbl_id BETWEEN 1 AND 9999)
     OR (dtbl_id BETWEEN 15000 AND 19999))
ORDER BY name

详情在这里

错误-OR然后具有较低的优先级AND。因此,您的第一个WHERE子句如下所示:

WHERE (name ILIKE '%nemo'  AND dtbl_id BETWEEN 1 AND 9999)
   OR (dtbl_id BETWEEN 15000 AND 19999)

另一个错误(正如 Edmund 指出的那样) - 获取以you need开头的名称。nemoILIKE 'nemo%'

于 2012-12-12T22:11:26.917 回答
1

主要问题是“以 nemo 开头”最好使用条件获得name ILIKE 'nemo%'——注意%通配符在末尾。将其放在开头搜索以 nemo 结尾的名称!

第二个问题是ORAND运算符的优先级,正如 Igor 所指出的那样。如他所示,在后两个子句周围加上括号。

于 2012-12-12T22:14:42.980 回答