SQLite:...除了...按随机顺序()
SQLite: ...EXCEPT ... ORDER BY RANDOM()
这个查询:
SELECT colour FROM ColourView EXCEPT SELECT colour FROM SkinColourExceptionsView WHERE race = 'Human' ORDER BY RANDOM() LIMIT 1
产生以下异常:1st ORDER BY term does not match any column in the result set
但是,将 ORDER BY RANDOM()
更改为 ORDER BY colour
能够产生结果(按颜色字母顺序排序而不是随机排序)。以下建议 ORDER BY RANDOM() LIMIT 1
应该有效:Select random row from an sqlite table。有人可以解释为什么我的查询不起作用吗?
在 compound query 中,ORDER BY 术语必须匹配结果集中的某些列。
您可以通过将复合查询移动到子查询中来解决此限制:
SELECT colour
FROM (SELECT colour FROM ColourView
EXCEPT
SELECT colour FROM SkinColourExceptionsView WHERE race = 'Human')
ORDER BY random()
LIMIT 1;
或者,重写查询以使用不同的过滤机制:
SELECT colour
FROM ColourView
WHERE colour NOT IN (SELECT colour
FROM SkinColourExceptionsView
WHERE race = 'Human')
ORDER BY random()
LIMIT 1;
这个查询:
SELECT colour FROM ColourView EXCEPT SELECT colour FROM SkinColourExceptionsView WHERE race = 'Human' ORDER BY RANDOM() LIMIT 1
产生以下异常:1st ORDER BY term does not match any column in the result set
但是,将 ORDER BY RANDOM()
更改为 ORDER BY colour
能够产生结果(按颜色字母顺序排序而不是随机排序)。以下建议 ORDER BY RANDOM() LIMIT 1
应该有效:Select random row from an sqlite table。有人可以解释为什么我的查询不起作用吗?
在 compound query 中,ORDER BY 术语必须匹配结果集中的某些列。
您可以通过将复合查询移动到子查询中来解决此限制:
SELECT colour
FROM (SELECT colour FROM ColourView
EXCEPT
SELECT colour FROM SkinColourExceptionsView WHERE race = 'Human')
ORDER BY random()
LIMIT 1;
或者,重写查询以使用不同的过滤机制:
SELECT colour
FROM ColourView
WHERE colour NOT IN (SELECT colour
FROM SkinColourExceptionsView
WHERE race = 'Human')
ORDER BY random()
LIMIT 1;