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
    才可以正常执行。

  • 相关阅读:
    Two Sum
    Binary Tree Preorder Traversal *
    Rotate Array
    Repeated DNA Sequences
    Symmetric Tree
    Path Sum
    Python初学——多线程Threading
    Python初学——窗口视窗Tkinter
    pyinstaller打包多个py文件和去除cmd黑框
    python获取当前路径
  • 原文地址:https://www.cnblogs.com/ChengDong/p/2479319.html
Copyright © 2011-2022 走看看