我对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 :(得分:3)
检查where子句中的优先顺序。使用括号使“或”和“和”定义更清晰。
答案 1 :(得分:0)
您需要特定一种类型的连接,这是非常严格的。
内连接,外连接,左外连接,右外连接。
这就是为什么你的数据被搞砸了。
答案 2 :(得分: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>