如果在两个查询中都没有相同的值,那么在查询来自两个数据源的查询时,我发现我在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它没有,但我不知道一个有效的方法来解决它。
答案 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