查询的coldfusion查询中是否有左连接?

use*_*399 4 sql-server 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
Run Code Online (Sandbox Code Playgroud)

这是左边加入coldfusion的方法吗?只是想确保,因为我无法找到关于此的好文章.谢谢

Car*_*ten 5

不完全确定你在这里尝试做什么,但答案是"在ColdFusion中没有剩下的加入?" 是:这取决于.如果数据库支持,你当然可以在对外部数据库的查询中使用左连接(我想不到没有的关系数据库).但是你不能在ColdFusion查询查询中进行连接; 你必须借助创造性的工会来实现这一目标.

但是,通常可以通过在对数据库的初始查询中有效使用连接来消除对查询查询中的连接的需要.例外情况是,如果您需要从完全不同的ColdFusion数据源或结果中加入查询<cfdirectory>.

  • 同意.如果需要进行QoQ,我会说相当一部分时间,那么在它到达CFML服务器之前,有更好的方法可以在数据库级别实现相同的目标. (4认同)
  • *在DB级*+1时达到相同的目的.在这里使用QoQ而不是db查询的原因是什么?如果原因是缺乏对sql的熟悉(正如你的一些线程建议的那样),你应该重新评估你的方法.如果您解释最终目标并提供相关规范(表ddl,当前sql,示例数据等),可能有人可以提出更有效的方法(像http://sqlfiddle.com这样的工具有助于共享数据库模式和样本数据.) (2认同)
  • 如果我已从cfc方法中提取数据并且我想快速左外连接,那么在CF QoQ中这样做会非常有帮助.我找到了http://instantbadger.blogspot.com/2006/07/faking-left-outer-join-in-query-of.html但是当getUnMatchedListElems()不够健壮以确保数据类型匹配时,我遇到了错误( Q时间戳与varchar和kablooey匹配).是的,我可以(并且将会)做一个新的方法,但是对于那种曾经拥有数据并运行新查询的情况,有一种方法可以提取冗余数据:/ (2认同)