2011-06-07 79 views
0

有一個關於SQL和ColdFusion的問題:我無法正確編寫SQL代碼,因此它不會重複兩次變量。到目前爲止,我已經有了:更改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)的定義顯示一些錢的問題。

任何人都可以告訴我如何以不同的方式定義它,以便此代碼的輸出不會重複變量?

+0

不知道表的模式涉及到它很難迴應這個,但你的意思是你得到重複c.company_id行或該列顯示了兩次? – Maverik 2011-06-07 09:09:47

+0

即時獲得重複的行,而不是列,我修改了選擇部分,但仍然沒有改變 – user775917 2011-06-07 09:36:27

+0

我已經更新了我的答案,並提供了一些關於下一步看什麼的提示。 – 2011-06-07 09:46:00

回答

2

我假設你的意思是你在結果集中得到了多個列,每個列的名字都是「COMPANY_ID」。解決方法是從所有表中指定特定列,而不是SELECT *(不僅僅是COMPANY_CAT表,別名CC)。


如果您得到「重複」行,那麼您需要檢查這些行的內容。發生的情況是,另一個表中的一行或多行與「COMPANY」表中的一行匹配。每對匹配的行在輸出中生成一行。現在,您已經擴展了列列表,比較了一對具有相同的行的行 - 列中它們有哪些不同?如果它位於最後3列中,則CRM中有多個行匹配相同的COMPANY_ID

一旦確定了導致重複出現的其他表格,您需要決定如何限制它們 - 如果您要彙總該表格中的值(例如SUMMAX),還是有辦法進一步請細化要與其他表格中的哪一行匹配到COMPANY中的行。

在猜測,雖然,我推測,一個公司可以有多個合作伙伴...

0

不要使用select table.*。相反,請明確列出每列並不重複列,如下所示:

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

您只需刪除*並用列名稱列表替換即可。作爲性能的角度來看,總是建議寫列列表而不是*。另外,如果要在數據庫表中添加任何列並使用*有時獲取數據,則由於緩存而不會反映查詢結果中的新列。

在你的情況下,只保留任何一個表的company_id。而已。