【问题标题】:How to Fetch common column from multiple tables in Database?如何从数据库中的多个表中获取公共列?
【发布时间】:2015-02-22 06:17:39
【问题描述】:
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 查询中提及每个表名。

有什么办法吗?

如果有任何可能,请告诉我......

【问题讨论】:

  • 不,不是在 SQL 中(至少没有任何东西符合标准,并且可以在多个引擎中工作)。任何在面试中提出此类问题的人都需要被一条鳟鱼击打,并接受有关数据库设计的培训。除非这是一个有技巧的问题,而且他们想让你用鳟鱼打他们。
  • 很好。 IBM DataStage tools 是否也适用相同的条件?
  • 从未听说过。如果问题是特定于数据库的,你应该把它放在标签中,这样有知识的人会更容易注意到它。
  • 如果你说只有 SQL,我会使用 SQL sysnonyms
  • 你需要写一个动态的sql。遍历表并构造 select 语句以从这些表中获取位置并将其存储在临时表中并返回。

标签: java mysql sql database


【解决方案1】:

从数据库元数据中获取表列表,然后查询每个表:

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));
}

【讨论】:

    【解决方案2】:

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

    例如。

    从 INFORMATION_SCHEMA.COLUMNS 组 BY COLUMN_NAME 中选择 COLUMN_NAME,其 count(COLUMN_NAME) > 2

    通过上面的查询,你会得到常见的列名

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        希望这会有所帮助!

        【讨论】:

        • 但这只会为您提供有关特定列的信息。您将如何确定 特定列 是否是所有 100 个表中的公共列?我认为您应该发布该答案并接受它?
        • 不,我在我的问题中已经清楚地提到了。否则我不会发布这个。
        【解决方案5】:

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


        数据库元数据 dbmd = con.getMetaData();
        字符串表[] = {"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[])) 的链接

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-02
          • 1970-01-01
          • 2014-07-11
          • 2012-10-08
          • 2022-12-08
          • 2016-07-19
          • 1970-01-01
          • 2020-12-11
          相关资源
          最近更新 更多