объединить 2 запроса SQL + ColdFusion - PullRequest
0 голосов
/ 08 июня 2011

Получили два запроса и не могут заставить их работать должным образом, их конечный продукт дает повторяющиеся элементы, вот запросы:

1-й запрос

<cfquery name="get_partner_all" datasource="#dsn#">
    SELECT  
        C.COMPANY_ID,
        C.FULLNAME,
        CP.MOBILTEL,
        CP.MOBIL_CODE, 
        CP.IMCAT_ID,
        CP.COMPANY_PARTNER_TEL, 
        CP.COMPANY_PARTNER_TELCODE,
        CP.COMPANY_PARTNER_TEL_EXT,
        CP.MISSION, 
        CP.DEPARTMENT, 
        CP.TITLE,
        CP.COMPANY_PARTNER_SURNAME, 
        CP.COMPANY_PARTNER_NAME, 
        CP.PARTNER_ID, 
        CP.COMPANY_PARTNER_EMAIL, 
        CP.HOMEPAGE, 
        CP.COUNTY,
        CP.COUNTRY,
        CP.COMPANY_PARTNER_ADDRESS, 
        CP.COMPANY_PARTNER_FAX,
        CP.RECORD_DATE,
        CP.MEMBER_CODE,
        CC.COMPANYCAT
        <cfif isdefined('attributes.report_sort') and attributes.report_sort is 2>
        ,CCD.SITE_DOMAIN
        </cfif>
    FROM
        COMPANY_PARTNER CP,
        COMPANY C,
        COMPANY_CAT CC
        <cfif isdefined('attributes.report_sort') and attributes.report_sort is 2>
        ,COMPANY_CONSUMER_DOMAINS CCD
        </cfif>
    WHERE
        C.COMPANY_ID = CP.COMPANY_ID
        AND C.COMPANYCAT_ID = CC.COMPANYCAT_ID      
    <cfif isDefined('attributes.search_status') and len(attributes.search_status)> 
        AND CP.COMPANY_PARTNER_STATUS = <cfqueryparam cfsqltype="cf_sql_integer" value="#attributes.search_status#">
    </cfif>
    <cfelseif isDefined("attributes.comp_cat") and len(attributes.comp_cat)>
        AND C.COMPANYCAT_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#attributes.comp_cat#">
    </cfif>
    <cfif isdefined('attributes.report_sort') and attributes.report_sort is 2>
        AND CP.PARTNER_ID = CCD.PARTNER_ID
        AND CCD.SITE_DOMAIN = 'www.projedepo.com'
    </cfif>
</cfquery>

2-й запрос:

<cfquery name="get_money" datasource="#dsn2#">
    SELECT BAKIYE,BORC,ALACAK FROM COMPANY_REMAINDER_MONEY WHERE COMPANY_ID = #company_id#
</cfquery>

, когда я пытаюсь определить, например, C.COMPANY_ID = CRM.COMPANY_ID, он показывает некоторые повторяющиеся элементы, я знаю, что я должен использовать что-то вроде JOINи другие вещи, но не могу понять, как это сделать :) нужна помощь, и спасибо всем за помощь!

вот объединенный запрос, все еще повторяющиеся переменные:

<cfquery name="get_partner_all" datasource="#dsn#">
    SELECT DISTINCT
        C.COMPANY_ID,
        C.FULLNAME,
        CP.MOBILTEL,
        CP.MOBIL_CODE, 
        CP.IMCAT_ID,
        CP.COMPANY_PARTNER_TEL, 
        CP.COMPANY_PARTNER_TELCODE,
        CP.COMPANY_PARTNER_TEL_EXT,
        CP.MISSION, 
        CP.DEPARTMENT, 
        CP.TITLE,
        CP.COMPANY_PARTNER_SURNAME, 
        CP.COMPANY_PARTNER_NAME, 
        CP.PARTNER_ID, 
        CP.COMPANY_PARTNER_EMAIL, 
        CP.HOMEPAGE, 
        CP.COUNTY,
        CP.COUNTRY,
        CP.COMPANY_PARTNER_ADDRESS, 
        CP.COMPANY_PARTNER_FAX,
        CP.RECORD_DATE,
        CP.MEMBER_CODE,
        CC.COMPANYCAT,
        CRM.*
        <cfif isdefined('attributes.report_sort') and attributes.report_sort is 2>
        ,CCD.SITE_DOMAIN
        </cfif>
    FROM
        COMPANY_PARTNER CP,
        COMPANY C,
        COMPANY_CAT CC,
        #dsn2_alias#.COMPANY_REMAINDER_MONEY CRM
        <cfif isdefined('attributes.report_sort') and attributes.report_sort is 2>
        ,COMPANY_CONSUMER_DOMAINS CCD
        </cfif>
    WHERE
        C.COMPANY_ID = CP.COMPANY_ID
        AND C.COMPANYCAT_ID = CC.COMPANYCAT_ID
        AND C.COMPANY_ID=CRM.COMPANY_ID 
    <cfif isDefined('attributes.search_status') and len(attributes.search_status)> 
        AND CP.COMPANY_PARTNER_STATUS = <cfqueryparam cfsqltype="cf_sql_integer" value="#attributes.search_status#">
    </cfif>     
    <cfif isDefined("attributes.cpid") and len(attributes.cpid)>
        AND C.COMPANY_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#attributes.cpid#">
    <cfelseif isDefined("attributes.comp_cat") and len(attributes.comp_cat)>
        AND C.COMPANYCAT_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#attributes.comp_cat#">
    </cfif>
    <cfif isdefined('attributes.report_sort') and attributes.report_sort is 2>
        AND CP.PARTNER_ID = CCD.PARTNER_ID
        AND CCD.SITE_DOMAIN = 'www.projedepo.com'
    </cfif>
</cfquery>

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Запрос не является неправильным, он просто показывает все (действительные) комбинации COMPANY_PARTNER и COMPANY_CONSUMER_DOMAINS. если вы хотите, вы можете добавить ORDER BY в конце:

ORDER BY C.COMPANY_ID,
         CP.PARTNER_ID,
         CRM.DOMAINID          --- some field in table CRM

или

ORDER BY C.COMPANY_ID,
         CRM.DOMAINID          --- some field in table CRM
         CP.PARTNER_ID,

или любой другой заказ, который вам нравится, скажите:

ORDER BY C.COMPANY_NAME
         C.COMPANY_ID,
         CP.COUNTRY,
         CP.COUNTY,
         CP.TITLE,
         CP.PARTNER_ID,

Я вижу еще два способа, которыми этот запрос может показать (другие, возможно, интересные) данные:

1 Изменить (в списке ВЫБОР) CRM.* на Count(*) AS ConsumerDomainsCount

и добавьте GROUP BY CP.COMPANY_ID, CP.PARTNER_ID в конце.

2 Операция зеркалирования, GROUP BY CRM.COMPANY_ID, CRM.DOMAINID и измените список SELECT, удалив все CP.* и оставьте только Count(*) AS PartnersCount


Если вы используете GROUP BY, вы также можете использовать другие агрегатные функции, такие как SUM(), AVG(), MIN(), MAX(), если у вас есть поля, которые можно добавлять (числовые поля) или сравнивать (например, даты).

0 голосов
/ 08 июня 2011

Это так же просто, как использовать ключевое слово DISTINCT?

<cfquery name="get_money" datasource="#dsn2#">
    SELECT DISTINCT COL1, COL2 ... FROM ...
</cfquery>

Также - вы должны использовать <cfqueryparam />, чтобы избежать уязвимостей SQL-инъекций.

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