sql—使用多个and语句从postgres表中随机选择一行

ar5n3qh5  于 2021-07-27  发布在  Java
关注(0)|答案(1)|浏览(313)

我用这个模式设置了一个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语句。我唯一的猜测是抵销表有问题。我用这个方法而不是按顺序,因为我被告知它要快得多。
有人知道是什么导致了我的问题吗?

xzv2uavs

xzv2uavs1#

查询的问题是,您正在使用 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

不需要为此编写子查询

相关问题