select k.* ,m.* from A k,B m where k.条件1 and k.条件2  and m.条件1 and m.条件2

解决方案 »

  1.   

    select * from A where 条件1 and 条件2
    union all
    select * from B where 条件1 and 条件2
      

  2.   

    select * from A where 条件1 and 条件2
    union
    select * from B where 条件1 and 条件2
    UNION 运算符使用准则
    使用 UNION 运算符时请遵循以下准则: 在使用 UNION 运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚合函数等)。
    在使用 UNION 组合的结果集中的相应列、或个别查询中使用的任意列的子集必须具有相同数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或提供了显式转换。例如,在 datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。
    用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。 
    示例如下: table3     table4   
    a b -c a b 
    int char(4) char(4) char(4) float 
    --- ------- ------- ------- ------- 
    1 abc jkl jkl 1.000 
    2 def mno mno 5.000 
    3 ghi pqr     执行以下查询:SELECT a, b FROM table3
    UNION 
    SELECT b, a FROM table4下面是结果集:a          b
    --------   -----
    1.000000   abc
    2.000000   def
    3.000000   ghi
    1.000000   jkl
    5.000000   mno在 UNION 操作中组合不同的数据类型时,这些数据类型将使用数据类型优先级的规则进行转换。在前面的示例中,int 值转换成 float 值,因为 float 类型的优先权比 int 类型高。有关更多信息,请参见数据类型的优先顺序。 以下查询将产生错误信息,因为相应列的数据类型不兼容:SELECT b, c FROM table3
    UNION 
    SELECT a, b FROM table4通过 UNION 生成的表中的列名来自 UNION 语句中的第一个单独的查询。若要用新名称引用结果集中的某列(例如在 ORDER BY 子句中),必须按第一个 SELECT 语句中的方式引用该列: 
    SELECT city AS Cities FROM stores_west
    UNION 
    SELECT city FROM stores_east
    ORDER BY city
      

  3.   

    如A,B表重没相同的列名可将查询结果存入新表
    select k.* ,m.* into table1 from A k,B m where k.条件1 and k.条件2  and m.条件1 and m.条件2
      

  4.   

    我现在用的是union all的方法,但实际效果非常糟糕(用asp读取oracle),
    速度很慢,主要B表中的数据量非常大,实际上从两个表中取出的数据合并在一起也不超过
    300条。请问有没有什么好的方法能提高速度。
      

  5.   

    leeboyan(宝宝) :列名是一样的。
      

  6.   

    楼主的a,b 表是否字段数相同,如不同则不可用union,如下才可:
    select name from a where ...
    union all
    select name from b where...
      

  7.   

    这样行么:
    <%
    sqlstr="select k.* ,m.* from A k,B m where k.条件1 and k.条件2  and m.条件1 and m.条件2"
    set rs=cnn.execute(sqlstr)
    while not rs.eof 
      response.write rs("你要输出的")&"<BR>"
      rs.movenext
    wend%>
      

  8.   

    我现在的写法是:select z,x,c from ( select * from A where 条件1 union all select * from B where 条件2 ) order by z desc
    (条件1和条件2相同)由于表B的记录量很大,估计有上万条,所以每次执行都要花很长的时间才能出来数据,所以想请教大家有没有什么好的方法能提高速度。
      

  9.   

    这样如何?
    1.声称新表temp
    select * into temp from A where 条件1 union all select * from B where 条件2
    2.查询
    select z,x,c from temp order by z desc
    3.输出查询结果
    4.删除临时表temp
    drop table temp