有关于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)定义来显示一些资金问题。
有人能告诉我如何以不同的方式定义它,以便此代码的输出不会重复变量吗?
答案 0 :(得分:2)
我假设您的意思是在结果集中获得多个列,每个列的名称为“COMPANY_ID”。对此的解决方案是指定所有表中的特定列,而不是SELECT *
(不仅仅是COMPANY_CAT
表,别名CC
)。
如果您获得“重复”行,则需要检查这些行的内容。发生的事情是,另一个表中的一行或多行匹配“COMPANY”表中的一行。每对匹配的行在输出中生成一行。现在您已经扩展了列列表,比较了具有相同COMPANY_ID
的一对行 - 它们在哪些列中有所不同?如果它位于最后3列,那么CRM
中有多个行匹配相同的COMPANY_ID
。
一旦您确定了导致重复发生的另一个表,您需要决定如何限制它们 - 如果您要汇总该表中的值(例如SUM
或MAX
),或者有没有办法进一步细化您希望与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。就是这样。