繁体   English   中英

从 SQLite 数据库中选择一些唯一的行,其中每一行都满足单独的条件

[英]Selecting some unique rows from an SQLite database, where each row meets a separate criteria

我需要帮助生成对我的 SQLite 数据库的查询,给定列名列表,获取相同数量的行。 列表中每一列的一行必须具有该列中的值不是 null。

背景

我的侮辱生成器从 SQLite 数据库中选择随机单词,其中的数字代表它们各自的用例,其中每一列都是一种单词。

词库

单词 形容词 程度 object ...
极端 1 2 NULL ...
非常 NULL 0 NULL ...
废话 3 NULL 0 ...
坏的 NULL NULL 0 ...
... ... ... ... ...
  • 'degree'下的0表示'very'表示可以用作度数,无需任何更改。
  • “crappy”的“形容词”下的3意味着它可以用作形容词,方法是在末尾添加“py”。
  • 'object'下的NULL表示'extreme'表示它不能用作 object。

当使用预制模板生成句子时,我的 python 脚本将对数据库中的每个单词进行单独查询,然后将所有单词放入模板中。 例如,该脚本将采用模板“你是(对象)”。 并生成以下查询,将该单词放入模板中。

SELECT
    word,
    object,
    random() AS priority
FROM
    wordLibrary
WHERE object NOT NULL
ORDER BY priority
LIMIT 1;

如果我们说上表是随机排序的,那么查询将 select 第一行'object'不是 null,这将导致句子“You are crap”。 . 虽然这不是最有效的,但它确实有效,但是......

问题

由于某些单词可以以多种方式使用,因此当使用具有多个不同单词的模板时,旧的解决方案有时会在一个句子中重复使用相同的单词两次。 如果我们使用模板“你是(度)(形容词)”。 , 旧的解决方案可以 select 'extreme'同时作为'degree''形容词' ,这将导致句子“You areextremeextreme”。 .

我想通过在单个查询中添加请求多个单词的功能来解决这个问题,以便 python 脚本获取单词类型列表并返回单词列表。 这里重要的是查询不应该对每个查询多次使用同一个词。

如果我们用“你是(度)(形容词)”。 example again, the new solution should randomly order the table and select the first row where 'degree' is not null and then select the first row, that hasn't been selected yet , where 'adjective' is not null. 如果上面的表格是随机排序的,这将导致句子“你非常糟糕”。 .

这是否有可能在单个查询中完成,该查询将搜索一个满足每个条件的唯一单词,如果可以,如何? 否则,我是否应该继续单独请求单词,但使用过滤器删除已选择的单词?

感谢@Barmar 的解决方案。 “你是(度)(形容词)”中。 例如,查询将如下所示:

SELECT *
FROM
    (
        SELECT word, degree, random() AS priority
        FROM wordLibrary
        WHERE degree NOT NULL
        ORDER BY priority
        LIMIT 1
    ) AS t1
JOIN
    (
        SELECT word, adjective, random() AS priority
        FROM wordLibrary
        WHERE adjective NOT NULL
        ORDER BY priority
        LIMIT 1
    ) AS t2
ON t1.word != t2.word;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM