изменить код SQL для устранения повторения - PullRequest
0 голосов
/ 07 июня 2011

У меня вопрос по 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 ]

2 голосов
/ 07 июня 2011

Я предполагаю, что вы имеете в виду, что вы получаете несколько столбцов в наборе результатов, каждый с именем «COMPANY_ID». Решением этой проблемы является указание определенных столбцов из всех таблиц вместо SELECT * (не только для таблицы COMPANY_CAT, псевдоним CC).


Если вы получаете «повторяющиеся» строки, то вам нужно проверить содержимое этих строк. Здесь происходит то, что одна или несколько строк из другой таблицы соответствуют одной строке из таблицы «КОМПАНИЯ». Каждая соответствующая пара строк генерирует строку в выходных данных. Теперь, когда вы расширили список столбцов, сравните пару строк с одинаковым значением COMPANY_ID - в каких столбцах они отличаются? Если, скажем, в последних 3 столбцах, в CRM есть несколько строк, совпадающих с COMPANY_ID.

После того, как вы определили другую таблицу, которая вызывает появление дубликатов, вам нужно решить, как их ограничить - следует ли вам агрегировать значения из этой таблицы (например, SUM или MAX), или есть способ дополнительно уточнить, какую строку из другой таблицы вы хотите сопоставить со строкой в ​​COMPANY.

Хотя я бы предположил, что у одной компании может быть несколько партнеров ...

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

Вам просто нужно удалить * и заменить на список имен столбцов.Всегда желательно писать список столбцов вместо * в качестве точки зрения производительности.Также, если вы добавляете какой-либо столбец в таблицу базы данных и когда-нибудь используете * для получения данных, это не будет отражать новый столбец в результате запроса из-за кэширования.

В вашем случае просто сохраните company_id для любой из таблиц.Вот и все.

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

Не используйте select table.*. Вместо этого назовите каждый столбец явно и не повторяйте столбцы следующим образом:

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