使用多个AND语句从Postgres表中选择随机行

卡梅伦

我使用此架构设置了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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从表中选择随机行

来自分类Dev

使用联合从多个表中选择计数相关的行

来自分类Dev

Postgres 从一个到多个表中选择单个表行

来自分类Dev

在一个查询中从多个表中选择随机行

来自分类Dev

如何基于case语句在连接多个表中选择一行

来自分类Dev

从mysqli准备好的语句中选择随机行

来自分类Dev

在表的多个列中选择重复的行

来自分类Dev

从多个表中选择行失败

来自分类Dev

使用复合主键从多个表中选择

来自分类Dev

使用半连接从多个表中选择

来自分类Dev

使用max从多个表中选择数据?

来自分类Dev

在多个表中选择

来自分类Dev

在领域表中选择一个随机行

来自分类Dev

从表中选择一个随机行

来自分类Dev

如何从表中选择2个不同的随机行?

来自分类Dev

在领域表中选择一个随机行

来自分类Dev

MySQL-从大表中选择随机行

来自分类Dev

如何从 Pervasive PSQL 表中选择随机行

来自分类Dev

从表中选择随机单词

来自分类Dev

如何使用HQL从表中选择随机记录

来自分类Dev

在Oracle中选择随机行

来自分类Dev

在mysql中选择随机行

来自分类Dev

在 Postgres 中,如何从表中选择最近日期的行?

来自分类Dev

使用with()从多个表中选择特定列,然后选择()

来自分类Dev

从tbl NOT IN模式中选择行的SQL语句(Oracle)(从联接表中选择)

来自分类Dev

从表中选择行,并使用多个相互关联的列进行排序

来自分类Dev

从多个表中选择多行并使用 php while 循环打印所有行

来自分类Dev

在postgres表中为每个组选择随机行

来自分类Dev

MySQLI使用准备好的语句从表中选择