2014-02-12 77 views
0

试图在查询内连接3个表返回空结果。奇怪的是,删除了一个表(两个表连接)返回一些集合。这是我做的:通过Spring JdbcTemplate连接多个表返回空结果

String sql = "SELECT\n" + 
      " tc.constraint_name, tc.table_name, kcu.column_name, \n" + 
      " ccu.table_name AS foreign_table_name,\n" + 
      " ccu.column_name AS foreign_column_name, constraint_type \n" + 
      "FROM \n" + 
      " information_schema.table_constraints AS tc \n" + 
      " JOIN information_schema.key_column_usage AS kcu\n" + 
      "  ON tc.constraint_name = kcu.constraint_name\n" + 
      " JOIN information_schema.constraint_column_usage AS ccu\n" + 
      "  ON ccu.constraint_name = tc.constraint_name\n" + 
      "WHERE constraint_type = 'FOREIGN KEY'"; 
    List<Map<String, Object>> foreignTable1 = jdbcTemplate(getShardId(sku)).queryForList(sql); 

总会返回一个空集。

回答

0

尝试使用外连接并检查是否有行没有对应的ID,以便连接删除不匹配的行。特别是你写的,这两个表导致一个非空的结果集似乎表明,与第三个表的连接不会导致前两个结果集的匹配行。

+0

我还使用了来自information_schema.table_constraints,information_schema.key_column_usage,information_schema.constraint_column_usage的外部SELECT *。相同的空白结果。但只有2个表返回 – Macchiatow

+0

我只需将第二个连接快速更改为“OUTER JOIN”,以检查第一个连接的结果集是否没有匹配的行。 – Smutje

+0

从information_schema.table_constraints,information_schema.key_column_usage,information_schema.constraint_column_usage中选择*将产生一个笛卡儿无匹配! – Macchiatow