打个比方: 
我有三张表:硬件,软件,其它。都在同一个数据库里。 
每张表的结构都一样:产品的名称和价格。 
1、现在我想用java实现数据库多表查询,查询某个产品的名称和价格。 
2、查询出来的结果通过使用ResultSetMetaData.getTableName(int i)方法 
获得某条结果所在的表名。 请高手指点一下,谢谢了。  

解决方案 »

  1.   

    我试过用联合 
    SELECT * FROM 表1 WHERE 列1=值1 
    UNION 
    SELECT * FROM 表2 WHERE 列1=值1 
    ...... 但这样查询出来的结果是作为一个临时表的,用getTableName()方法得不到所 
    在表的表名。  
      

  2.   

    SELECT '表1' as tn,* FROM 表1 WHERE 列1=值1 
    UNION 
    SELECT '表2' as tn,* FROM 表2 WHERE 列1=值1ado中可以直接这么写,用一个rs得到多个表,jdbc中不详
    SELECT * FROM 表1 WHERE 列1=值1 
    SELECT * FROM 表2 WHERE 列1=值1
      

  3.   

    jdbc中可以使用的,能够得到结果,但是得不到记录所在的表名。都为空。所以我觉得应该是因
    为生成的是一张临时表吧。
      

  4.   

    变通一下就可以了阿,增加个临时字段。SELECT *,tablename '表1' FROM 表1 WHERE 列1=值1
    UNION
    SELECT *,tablename '表2' FROM 表2 WHERE 列1=值1 这样根据rs里的tablename就知道是哪张表里的数据了。
      

  5.   

    SELECT *,tablename '表1' FROM 表1 WHERE 列1=值1
    我SQL不太懂,麻烦解释一下这句的作用。
      

  6.   

    SELECT '表1' as tn,* FROM 表1 WHERE 列1=值1 它这个意思是不是在表1里加一个字段tn,查询列1的值
      

  7.   

    不好意思,我的语句写错了。正确的应该是这样select t.*,'表1' tablename  from 表1 t
    (我在Oracle里测试的) ------------SELECT '表1' as tn,* FROM 表1 WHERE 列1=值1 意思是让你的查询结果里包含一个字段“tn”,而tn的值是"表1"
    你实际运行一下就知道效果了。
      

  8.   

    pigo() 的意思就是把表名作为一个常量放在select的查询结果里
    然后ResultSetMetaData.getObject("tn"),或ResultSetMetaData.getString("tn")得到该值
      

  9.   

    也就是说我可以在查询时加入一个临时字段tn,用以保存该记录所在的表名。
    然后可以直接用ResultSet.getString("sn");获得.是不是。再次谢谢大家了。