zoukankan      html  css  js  c++  java
  • 再谈 UNION ALL 和 ORDER BY NEWID 一起使用

    当使用UNION ALL或者UNION时,如果按照NewId()随机排序,那么,不能直接写
     
    SQL 代码
    SELECT TOP 2 * FROM [Article] Where ArticleId < 100 Order By NewId()
    UNION ALL
    SELECT TOP 8 * FROM [Article] Where ArticleId > 200 Order By NewId()
    需要写成
     
    SQL 代码
    SELECT * FROM (SELECT TOP 2 * FROM [Article] Where ArticleId < 100 Order By NewId()) A
    UNION ALL
    SELECT * FROM (SELECT TOP 8 * FROM [Article] Where ArticleId > 200 Order By NewId()) B
    但是,这些,在SQL Server 2008里面是正确的,但在SQL Server2000里面,仍然会报告错误:如果语句中包含UNION 运算符,那么ORDER BY 子句中的项就必须出现在选择列表中。
    在SQL Server 2000里面,需要写成
     
    SQL 代码
    SELECT * FROM (SELECT TOP 2 *, NewId() As RandomX FROM [Article] Where ArticleId < 100 Order By RandomX) A
    UNION ALL
    SELECT * FROM (SELECT TOP 8 *, NewId() As RandomX FROM [Article] Where ArticleId > 200 Order By RandomX) B
    才可以正常执行。

  • 相关阅读:
    Codeforces 931A&1312A&172A
    STL常用容器(deque&stack&queue)
    Codeforces 141A&1368A
    Tensorflow安装和配置
    Spark高可用配置
    Spark安装及环境配置
    SSH免密登录
    大数据集群linux环境搭配
    Spark学习之RDD算子
    Spark学习之再谈RDD
  • 原文地址:https://www.cnblogs.com/ChengDong/p/2479319.html
Copyright © 2011-2022 走看看