更改sql代码以消除重复

时间:2011-06-07 09:04:44

标签: sql coldfusion repeat

有关于SQL和ColdFusion的问题:我无法正确编写SQL代码,因此它不会重复两次变量。到目前为止我已经:

<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,
    CC.COMPANYCAT,
    CRM.BAKIYE,
    CRM.BORC,
    CRM.ALACAK
    FROM
        COMPANY_PARTNER CP,
        COMPANY C,
        COMPANY_CAT CC,
        #DSN2_ALIAS#.COMPANY_REMAINDER_MONEY CRM
    WHERE
                C.COMPANY_ID = CP.COMPANY_ID
    AND C.COMPANY_ID = CRM.COMPANY_ID
    AND C.COMPANYCAT_ID = CC.COMPANYCAT_ID

正如您所看到的,定义C.COMPANY_ID重复两次,因此变量也显示两次,但我需要此(CRM)定义来显示一些资金问题。

有人能告诉我如何以不同的方式定义它,以便此代码的输出不会重复变量吗?

3 个答案:

答案 0 :(得分:2)

我假设您的意思是在结果集中获得多个列,每个列的名称为“COMPANY_ID”。对此的解决方案是指定所有表中的特定列,而不是SELECT *(不仅仅是COMPANY_CAT表,别名CC)。


如果您获得“重复”行,则需要检查这些行的内容。发生的事情是,另一个表中的一行或多行匹配“COMPANY”表中的一行。每对匹配的行在输出中生成一行。现在您已经扩展了列列表,比较了具有相同COMPANY_ID的一对行 - 它们在哪些列中有所不同?如果它位于最后3列,那么CRM中有多个行匹配相同的COMPANY_ID

一旦您确定了导致重复发生的另一个表,您需要决定如何限制它们 - 如果您要汇总该表中的值(例如SUMMAX),或者有没有办法进一步细化您希望与COMPANY中的行匹配的另一个表中的哪一行。

虽然猜测,但我推测一家公司可能有多个合作伙伴......

答案 1 :(得分:0)

请勿使用select table.*。相反,请明确命名每列,不要重复列,如下所示:

select
  c.company_id,
  c.blah_blah,
  -- don't select cp.company_id
  cp.foo_bar,
  -- etc

答案 2 :(得分:0)

您只需要删除*并替换列名列表。始终建议编写列列表而不是*作为性能观点。此外,如果要在数据库表中添加任何列并使用*来获取数据,则由于缓存而不会在查询结果中反映新列。

在你的情况下,只需为任何一个表保留company_id。就是这样。