连接2查询SQL + ColdFusion

时间:2011-06-08 14:34:39

标签: sql join coldfusion

有两个查询,并且无法使它们正常工作,它们的最终产品会给出重复的项目,这里是查询:

第一次查询

<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>

第二次查询:

<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和其他东西的smth,但是无法理解怎么做:)需要帮助,谢谢大家的帮助!

这是加入的查询,仍然重复变量:

<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 :(得分:0)

查询没有错,它只显示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 更改(在SELECT列表中)CRM.*Count(*) AS ConsumerDomainsCount

并在最后添加GROUP BY CP.COMPANY_ID, CP.PARTNER_ID

2 镜像操作,GROUP BY CRM.COMPANY_ID, CRM.DOMAINID并删除任何CP.*并仅保留Count(*) AS PartnersCount

更改SELECT列表

如果您使用GROUP BY,还可以使用其他聚合函数,例如SUM()AVG()MIN()MAX(),如果您有可以使用的字段添加(数字字段)或比较(如日期)。

答案 1 :(得分:-1)

这是否与使用DISTINCT关键字一样简单?

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

此外 - 您应该使用<cfqueryparam />来避免SQL注入漏洞。