是这样的,从数据库抽取30个单选题,10个多选,10个判断
一种一种的抽取很简单(select top * from test where typename='单选',然后多选,然后判断)
想问问一块抽取的话有没有办法
大家帮忙看看~
我那种方法的就不用说了...
谢谢

解决方案 »

  1.   

    select top 30 * from test where typename='单选' order by newid()union allselect top 10 * from test where typename='多选' order by newid()union allselect top 10* from test where typename='判断' order by newid()
      

  2.   


    服务器: 消息 156,级别 15,状态 1,行 2
    在关键字 'union' 附近有语法错误。
    服务器: 消息 156,级别 15,状态 1,行 4
    在关键字 'union' 附近有语法错误。
    不行呢。。我用的MSSQL
      

  3.   


    select * from test where typename='单选' order by rand() limit 30
    union
    select * from test where typename='多选' order by rand() limit 10
    union
    select * from test where typename='判断' order by rand() limit 10
      

  4.   


    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'limit' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 3
    第 3 行: 'limit' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 5
    第 5 行: 'limit' 附近有语法错误。还是不行
      

  5.   

    倒,是mysql啊?那就不知道了
      

  6.   


    不是 mysql啊 是MSSQL 2000
      

  7.   

    他写的似乎是ms sql吧。在ms sql中 newid()方法是没问题的。
      

  8.   

    呵呵,无能为力了没看过mssql
      

  9.   

    SELECT * FROM (select top 30 * from test where typename='单选' order by newid()
     ) 
    UNION ALL
    SELECT * FROM (select * from test where typename='多选' order by newid()
    )
    试试看
      

  10.   

    SELECT * FROM (select top 30 * from test where typename='单选' order by newid()
     )  
    UNION ALL
    SELECT * FROM (select * from test where typename='多选' order by newid()
    )
    UNION ALL
    SELECT * FROM (select top 10* from test where typename='判断' order by newid())
    刚才少了一个 呵呵
      

  11.   

    SELECT FROM aaa ORDER BY rand() LIMIT 30这个是mysql取随机记录的
      

  12.   

    select top 30 * from exam_test where testtype=0 order by newid()
    union all
    select top 10 * from exam_test where testtype=1 order by newid()
    union all
    select top 10* from exam_test where testtype=2 order by newid()我是这样写的 testtype =0 就是单选 1多选 2判断
    报错:
    服务器: 消息 156,级别 15,状态 1,行 2
    在关键字 'union' 附近有语法错误。
    服务器: 消息 156,级别 15,状态 1,行 4
    在关键字 'union' 附近有语法错误。
    然后这个
    select * from exam_test where testtype=0 order by rand() limit 30
    union
    select * from exam_test where testtype=1 order by rand() limit 10
    union
    select * from exam_test where testtype=2 order by rand() limit 10报错:
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'limit' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 3
    第 3 行: 'limit' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 5
    第 5 行: 'limit' 附近有语法错误。
      

  13.   

    select top 30 * from exam_test where testtype=0 order by newid()
    union 
    select top 10 * from exam_test where testtype=1 order by newid()
    union 
    select top 10 * from exam_test where testtype=2 order by newid()try
      

  14.   

    select top 30 * from exam_test where testtype=0 order by newid()
    union
    select top 10 * from exam_test where testtype=1 order by newid()
    union
    select top 10* from exam_test where testtype=2 order by newid()服务器: 消息 156,级别 15,状态 1,行 2
    在关键字 'union' 附近有语法错误。
    服务器: 消息 156,级别 15,状态 1,行 4
    在关键字 'union' 附近有语法错误。
    SELECT * FROM (select top 30 * from exam_test where testtype=0 order by newid())  
    UNION ALL
    SELECT * FROM (select top 10 * from exam_test where testtype=1 order by newid())
    UNION ALL
    SELECT * FROM (select top 10 * from exam_test where testtype=2 order by newid())服务器: 消息 156,级别 15,状态 1,行 2
    在关键字 'UNION' 附近有语法错误。
    服务器: 消息 156,级别 15,状态 1,行 4
    在关键字 'UNION' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 5
    第 5 行: ')' 附近有语法错误。
    还是不行 奇怪~ 你们那能行吗?
      

  15.   

    好像 MS SQL 没有union吧
      

  16.   

    我机子上没有安装sql server
    sorry
      

  17.   


    MS SQL 是有nuion的,你可以查一下帮助
      

  18.   

    去掉也不行吧 貌似MSSQL 就没有UNION用法  我google搜索 MSSQL union用法...一个都没有,都是mysql
    union
      

  19.   


    试试我那个吧。
    mssql有union的 别怀疑 呵呵
      

  20.   

    NO 我有括号的。因为newID() 与union冲突 所以出现这种情况的。
      

  21.   

    使用 UNION 运算符组合多个结果
    UNION 运算符使您得以将两个或多个 SELECT 语句的结果组合成一个结果集。使用 UNION 组合的结果集都必须具有相同的结构。而且它们的列数必须相同,并且相应的结果集列的数据类型必须兼容。有关更多信息,请参见 UNION 运算符使用指南。UNION 的指定方式如下:select_statement UNION [ALL] select_statement例如,Table1 和 Table2 具有相同的两列结构。Table1     Table2   
    ColumnA ColumnB   ColumnC ColumnD 
    char(4) int   char(4) int 
    ------- ---   ------- --- 
    abc 1   ghi 3 
    def 2   jkl 4 
    ghi 3   mno 5 下面的查询在这两个表之间创建 UNION 运算:SELECT * FROM Table1
    UNION
    SELECT * FROM Table2下面是结果集:ColumnA  ColumnB-------  --------abc      1def      2ghi      3jkl      4mno      5UNION 的结果集列名与 UNION 运算符中第一个 SELECT 语句的结果集中的列名相同。另一个 SELECT 语句的结果集列名将被忽略。默认情况下,UNION 运算符从结果集中删除重复的行。如果使用 ALL 关键字,那么结果中将包含所有行并且将不删除重复的行。 UNION 运算的准确结果取决于安装过程中选择的排序规则和 ORDER BY 子句。有关不同排序规则的效果的更多信息,请参见 SQL Server 排序规则基础知识。Transact-SQL 语句中可以出现任意数目的 UNION 运算符,例如:SELECT * FROM TableA
    UNION
    SELECT * FROM TableB
    UNION
    SELECT * FROM TableC
    UNION
    SELECT * FROM TableD
    默认情况下,Microsoft® SQL Server™ 2000 从左到右对包含 UNION 运算符的语句进行取值。使用圆括号指定求值的顺序。例如,以下语句并不等价:/* First statement. */
    SELECT * FROM TableA
    UNION ALL
    (   
    SELECT * FROM TableB   UNION   SELECT * FROM TableC
    )
    GO
    /* Second statement. */
    (SELECT * FROM TableA UNION ALL SELECT * FROM TableB)
    UNION
    SELECT * FROM TableC)
    GO
    在第一个语句中,将消除 TableB 和 TableC 之间的联合中的重复行。而在该集与 TableA 之间的并集中,不消除重复行。在第二个语句中,TableA 和 TableB 之间的联合中包含重复行,但在随后与 TableC 的联合中将消除。ALL 关键字对此表达式的最终结果没有影响。如果使用 UNION 运算符,那么单独的 SELECT 语句不能包含其自己的 ORDER BY 或 COMPUTE 子句。只能在最后一个 SELECT 语句的后面使用一个 ORDER BY 或 COMPUTE 子句;该子句适用于最终的组合结果集。GROUP BY 和 HAVING 子句只能在单独的 SELECT 语句中指定。
      

  22.   

    好像是newid() 不能跟 union一起用
    LZ还是写3个SELECT吧,一次执行返回3个结果集就是了
      

  23.   

    SELECT * FROM (select top 30 * from test where typename='单选' order by newid()
     )  
    UNION ALL
    SELECT * FROM (select * from test where typename='多选' order by newid()
    )
    UNION ALL
    SELECT * FROM (select top 10* from test where typename='判断' order by newid())
     是这个吗
      

  24.   

    THX,我一直以为是冲突问题。原来是这个原因,的确需要补习哦。
      

  25.   

    select top 30 * from exam_test where testtype=1
    union all
    select top 10 * from exam_test where testtype=2
    union all
    select top 10* from exam_test where testtype=3这样能行就是不能随机了 看来只能一个一个来了
      

  26.   

    SELECT * FROM 
    (select top 30 * from exam_test where testtype=0 order by newid()) as a
    UNION ALL
    SELECT * FROM 
    (select top 10 * from exam_test where testtype=1 order by newid()) as b
    UNION ALL
    SELECT * FROM 
    (select top 10 * from exam_test where testtype=2 order by newid()) as ctry it again,if it does not work still,i have no idea any more.
      

  27.   


    select top 30 * from exam_test where testtype=0 
    union 
    select top 10 * from exam_test where testtype=1 
    union 
    select top 10 * from exam_test where testtype=2 
    这样就可以了
      去掉 order by
      

  28.   

    sorry, it Does not work
    error msg:如果语句中包含 UNION 运算符,那么 ORDER BY 子句中的项就必须出现在选择列表中。
      

  29.   

    SELECT * FROM 
    (select top 30 * ,NewID = NEWID() from exam_test where testtype=0 order by newid()) as a
    UNION ALL
    SELECT * FROM 
    (select top 10 * ,NewID = NEWID()  from exam_test where testtype=1 order by newid()) as b
    UNION ALL
    SELECT * FROM 
    (select top 10 * ,NewID = NEWID() from exam_test where testtype=2 order by newid()) as c
      

  30.   

    newid(),学习了.
    SELECT * FROM 
    (select top 10 newid() as f,* from test where typename='单选' order by f) as a
    UNION ALL
    SELECT * FROM 
    (select top 10 newid() as f,* from test where typename='单选' order by f) as b
    UNION ALL
    SELECT * FROM 
    (select top 10 newid() as f,* from test where typename='单选' order by f) as c
      

  31.   

    结贴 十分感谢 criedshy 辛苦了 谢谢大家  辛苦了~ tks