由于多步 WHERE,PSQL 查询语法错误
PSQL query syntax error because of multistep WHERE
我是 运行 一个简单的更新查询,遇到了各种语法错误,我不知道为什么。
这个 select 运行良好:
SELECT quote, author
FROM inspiration
WHERE length(quote)<250
AND used IS NULL
OR used > now()::date - 365
OFFSET floor(random()*10)
LIMIT 1;
虽然这是一个语法错误:
UPDATE inspiration SET used=now()
WHERE length(quote)<250
AND used IS NULL
OR used > now()::date - 365
OFFSET floor(random()*10)
LIMIT 1;
删除 OFFSET floor(random()*10) LIMIT 1
即可解决问题。但是我需要更新一个随机行。
运行 EXPLAIN 没有帮助,因为它是一个语法错误。将两个 WHERE 语句都包含在括号中没有帮助。
But I need one single random row updated.
如果我对你的理解正确的话,你想要这样的东西:
UPDATE inspiration
SET used = now()
WHERE id = (SELECT id -- PK of inspiration table
FROM inspiration
WHERE length(quote)<250
AND used IS NULL
OR used > now()::date - 365
ORDER BY random() LIMIT 1);
我也相信:
length(quote)<250
AND used IS NULL
OR used > now()::date - 365
-- should be
length(quote)<250
AND (used IS NULL
OR used > now()::date - 365)
我是 运行 一个简单的更新查询,遇到了各种语法错误,我不知道为什么。
这个 select 运行良好:
SELECT quote, author
FROM inspiration
WHERE length(quote)<250
AND used IS NULL
OR used > now()::date - 365
OFFSET floor(random()*10)
LIMIT 1;
虽然这是一个语法错误:
UPDATE inspiration SET used=now()
WHERE length(quote)<250
AND used IS NULL
OR used > now()::date - 365
OFFSET floor(random()*10)
LIMIT 1;
删除 OFFSET floor(random()*10) LIMIT 1
即可解决问题。但是我需要更新一个随机行。
运行 EXPLAIN 没有帮助,因为它是一个语法错误。将两个 WHERE 语句都包含在括号中没有帮助。
But I need one single random row updated.
如果我对你的理解正确的话,你想要这样的东西:
UPDATE inspiration
SET used = now()
WHERE id = (SELECT id -- PK of inspiration table
FROM inspiration
WHERE length(quote)<250
AND used IS NULL
OR used > now()::date - 365
ORDER BY random() LIMIT 1);
我也相信:
length(quote)<250
AND used IS NULL
OR used > now()::date - 365
-- should be
length(quote)<250
AND (used IS NULL
OR used > now()::date - 365)