不要在查询加入的coldfusion查询中删除行

时间:2016-01-06 12:52:00

标签: sql oracle coldfusion

如果在两个查询中都没有相同的值,那么在查询来自两个数据源的查询时,我发现我在coldfusion中删除了值。有办法避免这种情况吗?

<cfquery name="query1" datasource="Master" > 
  SELECT keyval as foo, otherVal FROM table1
</cfquery> 

<cfquery name="query2" datasource="External" > 
  Select keyval as foo, otherVal2 FROM table2
</cfquery> 

 <cfquery name="GetJoinedData" dbtype="query">
      SELECT DISTINCT * FROM 
      query1, query2
      WHERE query1.foo= query2.foo
   </cfquery>

table1将始终至少拥有所有记录table2,因此我的数据可能看起来像这样

table1
keyval   otherval
 a         120
 b         121  
 c         122
 d         124
 e         125   

table2
keyval   otherval2
b          xx
c          xx 

我正在寻找

foo       Otherval  otherval2
 a         120
 b         121         xx
 c         122         xx
 d         124
 e         125  

您可以猜到,GetJoinedData查询会删除不在两个表中的任何记录。我认为解决方案是添加&#34; Dummy&#34;记录查询2以记录记录查询1它没有,但我不知道一个有效的方法来解决它。

1 个答案:

答案 0 :(得分:3)

由于查询查询不支持import org.joda.time.LocalTime; import org.springframework.format.support.DefaultFormattingConversionService; public class SpringLocalTimeFormatterTry { public static void main(String[] args) { DefaultFormattingConversionService service = new DefaultFormattingConversionService(); try { System.out.println(service.convert("12:00", LocalTime.class)); } catch (Exception e) { System.out.println(e.getMessage()); } try { System.out.println(service.convert("12:00:00", LocalTime.class)); } catch (Exception e) { System.out.println(e.getMessage()); } } } ,您可以(使用问题的original version中的OUTER JOIN):

joinQuery

以上内容会为您提供<cfquery name="joinQuery" dbtype="query" > SELECT * FROM query2 WHERE 1 = 0 -- get the table structure but zero rows. </cfquery> <!--- Add a row of NULL values ---> <cfset QueryAddRow(joinQuery) /> <cfquery name="GetJoinedData" dbtype="query"> SELECT * FROM query1, query2 WHERE query1.foo = query2.foo UNION SELECT * FROM query1, joinQuery WHERE query1.foo NOT IN (#QuotedValueList(query2.foo)#) </cfquery>

您也可以在不使用查询查询的情况下执行此操作:

query1 LEFT OUTER JOIN query2