开发者

change sql code to eliminate repeating

Got a question regarding SQL and ColdFusion: I can't write SQL code properly, so that it won't repeat the variables twice. So far I've got:

<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,开发者_StackOverflow中文版 
    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

As you can see definition C.COMPANY_ID is repeated twice, so the variable shown also twice, but I need this (CRM) definition to display some money issues.

Can anyone show me how I can define it in a different way so that the output of this code won't repeat the variables?


I assume you mean that you get multiple columns in the result set, each with the name "COMPANY_ID". The solution to this is to specify specific columns from all of the tables, instead of SELECT * (not just for the COMPANY_CAT table, alias CC).


If you're getting "repeated" rows, then you need to examine the contents of these rows. What's happening there is that one or more rows from another table is matching one row from the "COMPANY" table. Each matching pair of rows generates a row in the output. Now you've expanded your column list, compare a pair of rows which have the same COMPANY_ID - in which columns do they differ? If it's in, say, the last 3 columns, then there are multiple rows in CRM which match the same COMPANY_ID.

Once you've identified the other table that is causing duplicates to occur, you need to decide how to limit them - should you be aggregating values from that table (e.g. SUM or MAX), or is there a way to further refine which row from the other table you want to match to the row in COMPANY.

At a guess though, I'd speculate that one company could have multiple partners...


Don't use select table.*. Instead, name each column explicitly and don't repeat columns, as follows:

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


You just need to remove * and replace with column name list. It is always advisable to write column list instead of * as performance point of view. Also if you are adding any column in database table and using * to get data sometime it will not reflect new column in query result due to caching.

In you case just keep company_id for any one of the table. That's it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜