我使用此架构设置了Postgres表
CREATE TABLE techwear
(
id SERIAL PRIMARY KEY,
name VARCHAR(50),
style techwearStyles,
article clothingType,
color techwearColors,
price DECIMAL(6,2),
link VARCHAR(500),
image VARCHAR(250)
);
当前,我有一个能够使用AND语句选择随机行的语句:
SELECT * FROM techwear
WHERE (style='urban' AND color='black')
OFFSET floor(random() * (SELECT COUNT(*) FROM techwear))
LIMIT 1;
但是,当我引入第二个AND语句时:
SELECT * FROM techwear
WHERE (style='urban' AND color='black' AND article='top')
OFFSET floor(random() * (SELECT COUNT(*) FROM techwear))
LIMIT 1;
我得到0行返回给我。但是,事实上,我知道有些行完全满足WHERE语句。我唯一的猜测是OFFSET语句有问题。我使用此方法而不是ORDER BY,因为有人告诉我它要快得多。
是否有人对导致我的问题的原因有任何想法?
查询的问题是,您正在用where
子句过滤记录,但是您要对中的记录进行全部计数offset
。由于该offset
值可能大于查询返回的记录数。因此,它不会返回任何记录。
SELECT * FROM techwear
WHERE (style='urban' AND color='black' AND article='top')
OFFSET floor(random() * (SELECT COUNT(*) FROM techwear
WHERE (style='urban' AND color='black' AND
article='top')))
LIMIT 1;
但更好的是,您应该使用order by random()
如下代码编写查询:
SELECT * FROM techwear
WHERE (style='urban' AND color='black' AND article='top')
order by random()
limit 1
无需为此编写子查询
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句