我用这个模式设置了一个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;
然而,当我介绍第二个和第二个陈述时:
SELECT * FROM techwear
WHERE (style='urban' AND color='black' AND article='top')
OFFSET floor(random() * (SELECT COUNT(*) FROM techwear))
LIMIT 1;
我得到0行返回给我。但是,我知道有一些行完全满足where语句。我唯一的猜测是抵销表有问题。我用这个方法而不是按顺序,因为我被告知它要快得多。
有人知道是什么导致了我的问题吗?
1条答案
按热度按时间xzv2uavs1#
查询的问题是,您正在使用
where
但是你正在把你的记录都记下来offset
. 正因为如此offset
值可以大于查询返回的记录数。因此它不会返回任何记录。但是最好使用
order by random()
这样地:不需要为此编写子查询