2011-03-14 37 views
0

我已經得到了ColdFusion的程序員一個簡單的問題,我不知道我做錯了這個代碼:不能參加2個查詢ColdFusion的

<cfquery name="get_account_plan" datasource="#DSN2#"> 
    SELECT 
     A.*, 
     C.* 
    FROM 
     ACCOUNT_PLAN A, 
     #dsn_alias#.COMPANY C 
    WHERE 
     A.ACCOUNT_CODE= '#attributes.str_account_code#' 
     OR A.ACCOUNT_CODE= '#attributes.str_account_code#.%' 
     AND C.COMPANY_ID = A.ACCOUNT_ID 
</cfquery> 

爲什麼我得到這個查詢的輸出不同?對於

<cfoutput>#get_account_plan.company_id#</cfoutput> 

我得到的值爲1和

<cfoutput>#get_account_plan.ACCOUNT_ID#</cfoutput> 

我得到的419價值?

+0

什麼數據庫服務器您使用的? – 2011-03-14 15:43:18

+0

@ciaran你的意思是服務器的操作系統?那麼微軟服務器2008 r2 – abrabr 2011-03-14 15:56:22

+1

很難說。我們需要更多線索來確定每個表格中存在哪些列,以及您想要做什麼。 – ale 2011-03-14 16:35:36

回答

3

檢查你在where子句中的優先順序。使用括號使「或」和「和」的定義更加清晰。

+0

thx,但你能告訴我如何把這些括號?! – abrabr 2011-03-14 15:19:27

+0

如果您希望company_id和account_id的值相同,則可以採用以下方法: (A.ACCOUNT_CODE ='#attributes.str_account_code#' OR A.ACCOUNT_CODE ='#attributes.str_account_code#。%' ) AND C.COMPANY_ID = A.ACCOUNT_ID – 2011-03-14 15:32:37

+0

@Paul nope :) does not work ... – abrabr 2011-03-14 15:36:27

0

您需要特定的連接類型,這是更嚴格的。

內連接,外連接,左外連接,右外連接。

這就是爲什麼你的數據返回被搞砸了。

0

試試這個:

<cfquery name="get_account_plan" datasource="#DSN2#"> 
    SELECT 
     A.*, 
     C.* 
    FROM 
     ACCOUNT_PLAN A INNER JOIN #dsn_alias#.COMPANY C ON C.COMPANY_ID = A.ACCOUNT_ID 
    WHERE 
     A.ACCOUNT_CODE= <cfqueryparam cfsqltype="cf_sql_varchar" value="#attributes.str_account_code#" /> 
     OR A.ACCOUNT_CODE LIKE '#attributes.str_account_code#.%' <!--- Note LIKE. BTW, you need to sanatise this input! ---> 
</cfquery> 
+0

nope ...也許我做錯了什麼?! :) – abrabr 2011-03-14 15:53:17

+2

我認爲這是一個給定的。你到底想要做什麼? – ale 2011-03-14 16:33:50