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查询中的每个表名。
有什么办法吗?
如果有任何可能性让我知道......
答案 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。
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 ) ;
}
}
的链接