2014-04-10 55 views
2

由於我是根據我的同事使用coldfusion的新手,因此我們無法左鍵加入查詢的coldfusion查詢。所以這就是我們會做一個「竅門」來做一個左連接。 例如:在查詢的coldfusion查詢中是否存在左連接?

<cfquery datasource="Intranet" name="GroupStarsGiven"> 
    SELECT execoffice_status, submitterdept, COUNT(*) as 'totalstarsgiven' 
    FROM CSEReduxResponses 
    WHERE execoffice_status = 1 
    GROUP BY execoffice_status, submitterdept 
</cfquery> 

<cfquery dbtype="query" name="GetTotalStarsGiven"> 
    SELECT * 
    FROM GroupStarsGiven, GetDepartments 
    WHERE GroupStarsGiven.submitterdept = GetDepartments.csedept_id 
</cfquery> 

<cfquery name="joinQuery2" dbtype="query" > 
SELECT * 
FROM GetTotalStarsGiven 
WHERE GetTotalStarsGiven.csedept_id = -1 
</cfquery> 

<cfset QueryAddRow(joinQuery2)> 

<cfquery name="GetUnion2" dbtype="query" > 
SELECT * 
FROM GetUnion, GetTotalStarsGiven 
WHERE GetUnion.csedept_id = GetTotalStarsGiven.csedept_id 

UNION 

SELECT GetUnion.*, joinQuery2.* 
FROM GetUnion, joinQuery2 
WHERE GetUnion.csedept_id NOT IN (#ValueList(GetTotalStarsGiven.csedept_id)#) 
ORDER BY csedept_name ASC 
</cfquery 

這是做左連接ColdFusion的方式?只是想確定一下,因爲我無法在此找到一篇好文章。 謝謝

+1

您可能想要爲https://bugbase.adobe.com/index.cfm?event=bug&id=3687749投票。這一不足之處在2007年首次報道(https://bugbase.adobe.com/index.cfm?event=bug&id=3031961),Adobe尚未爲此做任何事情:-( –

+1

「GetUnion」com在哪裏從? –

+0

這是我離開Q. Q. –

回答

4

不完全確定你要在這裏做什麼,但答案是「有沒有加入ColdFusion?是:這取決於。如果數據庫支持它,你當然可以在查詢中使用一個左連接來訪問外部數據庫(我想不出一個沒有的關係數據庫)。但是你不能在ColdFusion查詢中進行連接;你不得不求助於創造性地使用工會來實現這一點。

但是,通過在對數據庫的初始查詢中有效使用連接,通常可以消除在查詢查詢中加入連接的需要。如果您需要連接來自完全不同的ColdFusion數據源的查詢或<cfdirectory>的結果,則會有例外情況。

+4

離開加入同意如果有人需要做一個QoQ,我會說一個相當的時間百分比然後有一個很好的機會有一個更好的方法來達到相同的目標DB級別在到達CFML服務器之前 –

+2

*在數據庫級別達到相同的目標* +1。在這裏使用QoQ而不是db查詢的原因是什麼?如果原因是不熟悉sql(如某些)你應該重新評估你的方法,如果你解釋你的最終目標並提供相關的規格(表ddl,當前的sql,樣本數據等等),工具可能會有人提出更有效的方法。 ://sqlfiddle.com有助於分享您的數據庫模式和示例數據。) – Leigh

+2

如果我已經從cfc方法中提取數據,並且想要快速執行左外連接,那麼在CF QoQ中這樣做會非常有幫助。我發現http://instantbadger.blogspot.com/2006/07/faking-left-outer-join-in-query-of.html,但是當getUnMatchedListElems()不夠健壯以確保數據類型匹配時我得到錯誤( Q時間戳與varchar和kablooey匹配)。是的,我可以(也將會)做一個新的方法,但是如果我已經擁有數據並運行一個新的查詢可以獲取冗餘數據,那麼有一種方法可以實現:/ – gordon

2

在ColdFusion的查詢查詢中沒有左外連接是正確的。你已經顯示的方法是一個通用的解決方案。如果你正在使用ColdBox MVC平臺,實際上有一個插件可以爲你留下外部連接。

http://wiki.coldbox.org/wiki/Plugins:QueryHelper.cfm#doLeftOuterJoin

免責聲明:我是團隊冷箱的一部分。

+0

瞭解它,但是還有內聯,聯接,聯合是否正確? – user3408399

+0

當然可以。並且要清楚,以防萬一發生混淆,「查詢查詢」(當dbtype =「query」)不會在您的數據庫服務器上執行。這是由ColdFusion執行的內存中操作。如您所知,CF支持針對內存中結果集的SQL操作子集。對於小數據集,查詢查詢可以非常快速且方便,但要注意使用大型查詢可能會降低性能(超過幾千行) –