не может объединить 2 запроса в Coldfusion - PullRequest
0 голосов
/ 14 марта 2011

У меня простой вопрос к программистам 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?

Ответы [ 3 ]

3 голосов
/ 14 марта 2011

Проверьте порядок очередности в предложении where. Используйте скобки, чтобы сделать определения "или" и "и" более понятными.

0 голосов
/ 14 марта 2011

Попробуйте это:

<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 голосов
/ 14 марта 2011

Вам необходимо указать тип соединения, который намного строже.

Либо внутреннее соединение, внешнее соединение, левое внешнее соединение, правое внешнее соединение.

Вот почему ваши возвращенные данные испорчены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...