【问题标题】:SQLite: ...EXCEPT ... ORDER BY RANDOM()SQLite:...除了...随机排序()
【发布时间】:2015-07-19 11:13:16
【问题描述】:

这个查询:

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。有人可以解释为什么我的查询不起作用吗?

【问题讨论】:

    标签: sqlite random sql-order-by sql-except


    【解决方案1】:

    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;
    

    【讨论】:

    • 两个答案都很好,解释是最重要的!非常感谢先生。
    猜你喜欢
    • 2019-03-17
    • 1970-01-01
    • 2012-12-04
    • 2012-11-19
    • 2012-03-16
    • 2012-01-05
    • 1970-01-01
    • 2015-03-04
    • 2014-07-21
    相关资源
    最近更新 更多