合并两个表后如何在 SQLite 中生成随机输出

how to produce random output in SQLite after union two tables

我有一个 SQLite 数据库,我需要将两个表连接在一起并以随机顺序输出合并后的表。

而数据库是这样的

我是 SQLite 的新手,在搜索和阅读教程后,我使用以下命令:

SELECT Column1 AS Eng,Column2 AS Chn
FROM list1
UNION  
SELECT Column1 AS Eng,Column2 AS Chn
FROM list2
ORDER BY Eng RANDOM()

但是输出是

sqlite3.OperationalError: near "RANDOM": syntax error

然而,如果我删除 RANDOM() 函数,除了没有随机输出外,它没有任何问题

SELECT Column1 AS Eng,Column2 AS Chn
FROM list1
UNION  
SELECT Column1 AS Eng,Column2 AS Chn
FROM list2
ORDER BY RANDOM() 

如果我删除 Eng,输出是错误的,消息是:

SELECT Column1 AS Eng,Column2 AS Chn
FROM list1
UNION  
SELECT Column1 AS Eng,Column2 AS Chn
FROM list2
ORDER BY Eng 

消息是

sqlite3.OperationalError: 1st ORDER BY term does not match any column in the result set

我按照此处的说明进行操作 Select random row(s) in SQLite and here Selecting a Random Row from an SQLite Table

谢谢!

使用 UNION 时,ORDER BY 子句中的表达式仅限于查询的列。 (为什么?因为 SQL 标准是这么说的。)

您必须使值按查询的列排序:

SELECT this, that, random() AS r
FROM ...
UNION ALL
SELECT what, ever, random()
FROM ...
ORDER BY r

因为像 QL 提到的那样,您必须按查询中的列排序,所以您必须采用不同的方法。 Random() 只是一个函数。

因此,您可以 select RANDOM() 而不是按 RANDOM() 排序,然后按 it.

排序
SELECT Column1 AS Eng, Column2 AS Chn, RANDOM() As Random
FROM list1
UNION  
SELECT Column1 AS Eng, Column2 AS Chn, RANDOM() As Random
FROM list2
ORDER BY Random