如何从数据库中的多个表中获取公共列?

时间:2014-12-24 04:51:02

标签: java mysql sql database

Greeting to all smart people around here !!

我遇到了一个关于SQL的奇怪的访谈问题。

Qn。 If I have 100 tables in Database. I want to fetch common records from Each table.

例如,location是100个表中的公共字段。我想从所有表中获取location字段,而不提及SQL查询中的每个表名。

有什么办法吗?

如果有任何可能性让我知道......

5 个答案:

答案 0 :(得分:2)

从db元数据中获取表的列表,然后使用每个表进行查询:

Statement stmt = conn.createStatement();
ResultSet locationRs = null;
DatabaseMetaData md = conn.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
    locationRs = stmt.executeQuery("SELECT location from "+ rs.getString(3));
    System.out.println(locationRs.getString(1));
}

答案 1 :(得分:0)

在MSSQL Server中,您有包含列名的INFORMATION_SCHEMA.COLUMNS表,因此您可以使用group by并计算一些值,您将获得列名称,之后您可以使用pivot获取列名的值并继续它。你会得到ans。

例如。

从INFORMATION_SCHEMA.COLUMNS群组中选择COLUMN_NAME群组BY COLUMN_NAME(COLUMN_NAME)> 2

通过上述查询,您将获得常用列名

答案 2 :(得分:0)

您可以在数据库中的任意数量的表中尝试此操作:

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS  group by COLUMN_NAME having count(COLUMN_NAME)=(select count(*) from INFORMATION_SCHEMA.TABLES)

答案 3 :(得分:0)

我的朋友找到了我的问题的答案..

要从多个表中获取常用列,请使用 INFORMATION_SCHEMA.COLUMNS 和公用列名。

查询: select *from information_schema.columns where column_name='column name'

希望这会有所帮助!

答案 4 :(得分:0)

我假设你已经有连接和statemnt对象了。现在尝试以下;如果不对循环和条件进行一些调整,它可能对你有用。此外,您需要有两个ResultSet对象:rs1和rs2。


DatabaseMetaData dbmd = con.getMetaData();
    String table [] = {“TABLE”}`;
        rs1 = dbmd.getTable(null,null,“。*”,table);

while(rs1.next()){  
    String tableFrom = rs1.getString(3) ;
    rs2 =  dbmd.getColumns(null,null,tableFrom , ".*") ;  
     while(rs2.next()) { 

        String locColFrom = rs2.getString(3);  

        if(locColFrom .equalsIgnoreCase("location")) 
             stmt.executeQuery(select locColFrom from  tableFrom ) ;
        }
}  

这是研究[Oracle](http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[])

的链接