从MySQL联接表中获取一列

从MySQL联接表中获取一列,mysql,sql,Mysql,Sql,我在MySQL中有一个查询,我正在使用它制作一个水晶报表 现在在查询中有一个名为scan_mode的列,它来自gfi_事务表。我在报告中使用此扫描模式来抑制某些部分。但是,有时,对于某些事务ID,此值将为空 所以现在我想把这个扫描模式作为单独的查询,这样它就可以工作了。 任何人都可以帮助我如何修改下面的查询,以只采取扫描模式列 SELECT cc.cost_center_code AS cccde, cc.name AS ccnme,gf.scan_mode, cc.c

我在MySQL中有一个查询,我正在使用它制作一个水晶报表

现在在查询中有一个名为scan_mode的列,它来自gfi_事务表。我在报告中使用此扫描模式来抑制某些部分。但是,有时,对于某些事务ID,此值将为空

所以现在我想把这个扫描模式作为单独的查询,这样它就可以工作了。 任何人都可以帮助我如何修改下面的查询,以只采取扫描模式列

SELECT 
    cc.cost_center_code AS cccde,
    cc.name AS ccnme,gf.scan_mode,
    cc.cost_center_id AS ccid,
    site.name AS siteme,
    crncy.currency_locale AS currency_locale,
    cntry.language AS LANGUAGE,
    cntry.country_name AS cntrynm,
    crncy.decimal_digits AS rnd,
    gf.transaction_no AS Serial_No,
    brnd.name AS brand_name,
    rsn.description AS reason,
    gf.comment AS COMMENT,
    ts.status_description AS STATUS,
    DATE_FORMAT(gf.created_date,'%d/%m/%Y') AS created_date,
    gf.created_by AS created_by,
    IFNULL(gf.approval_no,'Not authorized') AS Trans_no,
    gf.approved_date AS approval_dt,
    gf.approved_by AS approved_by,gf.status AS status1,
    IFNULL(loc.cost_center_code,cc.cost_center_code) AS cur_location,
    gf.document_ref_no,gf.document_ref_type,
    ,DATE_FORMAT(document_ref_date1,'%d/%m/%Y')) AS invoice_no
        FROM 
    gfi_transaction gf
    INNER JOIN gfi_instruction gfn ON (gf.transaction_id=gfn.transaction_id)
    INNER JOIN gfi_document_instruction doc ON (gf.ref_transaction_no =      doc.document_instruction_id)
    INNER JOIN reason rsn ON (gf.reason_id = rsn.reason_id)
    INNER JOIN gfi_status ts ON (gf.status = ts.gfi_status_id)
    INNER JOIN transaction_type tt ON (gf.transaction_type_id = tt.transaction_type_id)
    INNER JOIN brand brnd ON(gf.brand_id=brnd.brand_id)
    -- cc details
    INNER JOIN cost_center cc ON (brnd.parent_brand  = cc.brand_id OR gf.brand_id = cc.brand_id)
    INNER JOIN site site ON(cc.site_id = site.site_id)
    INNER JOIN country cntry ON (site.country_id = cntry.country_id)
    INNER JOIN currency crncy ON (cntry.currency_id=crncy.currency_id)
    LEFT OUTER JOIN alshaya_location_details loc ON 
        (gf.brand_id = loc.brand_id AND loc.cost_center_id =   gf.cost_centre_id)
    LEFT OUTER JOIN alshaya_location_details locto ON 
        (locto.cost_center_id = gf.from_cost_center_id)         
WHERE 
    gf.transaction_id='{?TransID}'
    AND rsn.transaction_type_id IN (10,11,14)

哇,这是个大问题。我在构建的一个查询中遇到了一个类似的问题,发现if语法可以解决我的问题。这一问题也得到了回答:


看起来扫描模式列来自“gfi\U事务”表,它似乎是查询中的主表。如果此列的值为null,则表示表本身的此列值为null。在查询中单独考虑这一点并不能解决您的问题。尝试用默认值替换null,并在代码中处理它。您可以使用ifnull(扫描模式“默认”)添加默认值而不是NULL

$psdb->query = "SELECT count, s.classid,
    if (k.sic != k.siccode, k.siccode, s.siccode) as siccode,
    if (k.sic != k.siccode, k.sicdesc, s.sicdesc) as sicdesc,
    if (k.sic != k.siccode, k.sicslug, s.sicslug) as sicslug
  FROM ...