首页 > 解决方案 > LEFT JOIN 多个表不返回预期结果

问题描述

我想在 csv 中导出这个数据组合,我已经做到了,没关系,但只有一件事与我的想法不符。

如果我选择 amm.atc_TipoSocieta 它总是返回空字段,即使关系是正确的并且表格是正确的。

询问:

 SET SESSION group_concat_max_len=9999999;

SELECT pre.cq_IDCessione,null,pre.cq_IDCliente,pre.cq_IDSocieta,pre.cq_IDFigura, CASE
    WHEN (STRCMP(amm.atc_TipoSocieta, 'Ditta Individuale') = 0) THEN 4
    WHEN (STRCMP(amm.atc_TipoSocieta, 'Ente') = 0) OR (STRCMP(amm.atc_TipoSocieta, 'Ente Pubblico') = 0) OR (STRCMP(amm.atc_TipoSocieta, 'Ente Statale') = 0) OR (STRCMP(amm.atc_TipoSocieta, 'Pubblica') = 0) THEN 3
    WHEN (STRCMP(amm.atc_TipoSocieta, 'Ente Parapubblico') = 0) THEN 5
    WHEN (STRCMP(amm.atc_TipoSocieta, 'Ministeriale') = 0) THEN 2
    ELSE 1
END,null,(select CONCAT( '[',
                GROUP_CONCAT(JSON_OBJECT('id', cliente.id, 'nome', cliente.nome, 'cognome', cliente.cognome, 'amm_id', cliente.amm_id, 'user_id', cliente.user_id, 'sesso', cliente.sesso, 'codice_fiscale', cliente.codice_fiscale, 'data_nascita', cliente.data_nascita, 'cittadinanza', cliente.cittadinanza, 'telefono', cliente.telefono, 'cellulare', cliente.cellulare, 'email', cliente.email, 'luogoNascita', cliente.luogoNascita, 'luogoResidenza', cliente.luogoResidenza, 'indirizzoResidenza', cliente.indirizzoResidenza, 'cap', cliente.cap, 'indirizzo_domicilio', cliente.indirizzo_domicilio, 'localita_domicilio', cliente.localita_domicilio, 'cap_domicilio', cliente.cap_domicilio, 'stato_civile', cliente.stato_civile, 'tipo_documento', cliente.tipo_documento, 'doc_localita_rilascio', cliente.doc_localita_rilascio, 'doc_data_rilascio', cliente.doc_data_rilascio, 'doc_data_scadenza', cliente.doc_data_scadenza, 'doc_ente_rilascio', cliente.doc_ente_rilascio, 'doc_numero', cliente.doc_numero, 'tipo_permesso', cliente.tipo_permesso, 'data_scadenza_permesso', cliente.data_scadenza_permesso, 'data_inizio_soggiorno', cliente.data_inizio_soggiorno, 'qualifica', cliente.qualifica, 'tipo_assunzione', cliente.tipo_assunzione, 'data_assunzione', cliente.data_assunzione, 'fondo_pensione', cliente.fondo_pensione, 'id_stipendio_spt', cliente.id_stipendio_spt, 'tfr_lordo', cliente.tfr_lordo, 'tfr_anticipi', cliente.tfr_anticipi, 'mese_anno_cedolino', cliente.mese_anno_cedolino, 'partita_iva', cliente.partita_iva, 'reddito', cliente.reddito, 'altri_impegni', cliente.altri_impegni, 'scadenze', cliente.scadenze, 'mod_invio_com', cliente.mod_invio_com, 'fondo_pensione_1', cliente.fondo_pensione_1, 'fondo_pensione_1_bool', cliente.fondo_pensione_1_bool, 'fondo_pensione_2', cliente.fondo_pensione_2, 'fondo_pensione_2_bool', cliente.fondo_pensione_2_bool))
                    ,']') 
                    from assiprest_produzione.cliente
                    where pre.cq_IDCliente = assiprest_produzione.cliente.id
    ),cli.data_assunzione,null,pre.cq_DataCaricamento,pre.cq_DataAnteTermine,cli.altri_impegni,null,cli.reddito,pre.cq_NumeroRate,pre.cq_ImportoRata,pre.cq_ProvvMontanteFG1,users.fdv_PPProvvInteressi,null,null,null,null,null,3
FROM (((assiprest_original.cessioni as pre
LEFT JOIN assiprest_original.atc AS amm ON pre.cq_IDSocieta = amm.atc_IDAtc)
LEFT JOIN assiprest_original.figuredivendita AS users ON users.fdv_IDFigura = pre.cq_IDFigura)
LEFT JOIN assiprest_produzione.cliente AS cli ON cli.id = pre.cq_IDCliente)
INTO OUTFILE 'C:/xampp/mysql/data/assiprest/preventivatore.csv'
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

atc 表

编辑:

我更新了我的代码并“解决”了 amm.atc_TipoSocieta 问题,删除了相关的左连接并将其添加到 FROM 子句,但这样做我又回到了预览问题,即:'on 子句中的未知列 pre.cq_IDFigura' '。

代码:

 SET SESSION group_concat_max_len=9999999;

SELECT pre.cq_IDCessione,null,pre.cq_IDCliente,pre.cq_IDSocieta,pre.cq_IDFigura, CASE
    WHEN (STRCMP(amm.atc_TipoSocieta, 'Ditta Individuale') = 0) THEN 4
    WHEN (STRCMP(amm.atc_TipoSocieta, 'Ente') = 0) OR (STRCMP(amm.atc_TipoSocieta, 'Ente Pubblico') = 0) OR (STRCMP(amm.atc_TipoSocieta, 'Ente Statale') = 0) OR (STRCMP(amm.atc_TipoSocieta, 'Pubblica') = 0) THEN 3
    WHEN (STRCMP(amm.atc_TipoSocieta, 'Ente Parapubblico') = 0) THEN 5
    WHEN (STRCMP(amm.atc_TipoSocieta, 'Ministeriale') = 0) THEN 2
    ELSE 1
END,null,(select CONCAT( '[',
                GROUP_CONCAT(JSON_OBJECT('id', cliente.id, 'nome', cliente.nome, 'cognome', cliente.cognome, 'amm_id', cliente.amm_id, 'user_id', cliente.user_id, 'sesso', cliente.sesso, 'codice_fiscale', cliente.codice_fiscale, 'data_nascita', cliente.data_nascita, 'cittadinanza', cliente.cittadinanza, 'telefono', cliente.telefono, 'cellulare', cliente.cellulare, 'email', cliente.email, 'luogoNascita', cliente.luogoNascita, 'luogoResidenza', cliente.luogoResidenza, 'indirizzoResidenza', cliente.indirizzoResidenza, 'cap', cliente.cap, 'indirizzo_domicilio', cliente.indirizzo_domicilio, 'localita_domicilio', cliente.localita_domicilio, 'cap_domicilio', cliente.cap_domicilio, 'stato_civile', cliente.stato_civile, 'tipo_documento', cliente.tipo_documento, 'doc_localita_rilascio', cliente.doc_localita_rilascio, 'doc_data_rilascio', cliente.doc_data_rilascio, 'doc_data_scadenza', cliente.doc_data_scadenza, 'doc_ente_rilascio', cliente.doc_ente_rilascio, 'doc_numero', cliente.doc_numero, 'tipo_permesso', cliente.tipo_permesso, 'data_scadenza_permesso', cliente.data_scadenza_permesso, 'data_inizio_soggiorno', cliente.data_inizio_soggiorno, 'qualifica', cliente.qualifica, 'tipo_assunzione', cliente.tipo_assunzione, 'data_assunzione', cliente.data_assunzione, 'fondo_pensione', cliente.fondo_pensione, 'id_stipendio_spt', cliente.id_stipendio_spt, 'tfr_lordo', cliente.tfr_lordo, 'tfr_anticipi', cliente.tfr_anticipi, 'mese_anno_cedolino', cliente.mese_anno_cedolino, 'partita_iva', cliente.partita_iva, 'reddito', cliente.reddito, 'altri_impegni', cliente.altri_impegni, 'scadenze', cliente.scadenze, 'mod_invio_com', cliente.mod_invio_com, 'fondo_pensione_1', cliente.fondo_pensione_1, 'fondo_pensione_1_bool', cliente.fondo_pensione_1_bool, 'fondo_pensione_2', cliente.fondo_pensione_2, 'fondo_pensione_2_bool', cliente.fondo_pensione_2_bool))
                    ,']') 
                    from assiprest_produzione.cliente
                    where pre.cq_IDCliente = assiprest_produzione.cliente.id
    ),cli.data_assunzione,null,pre.cq_DataCaricamento,pre.cq_DataAnteTermine,cli.altri_impegni,null,cli.reddito,pre.cq_NumeroRate,pre.cq_ImportoRata,pre.cq_ProvvMontanteFG1,users.fdv_PPProvvInteressi,null,null,null,null,null,3
FROM assiprest_original.cessioni as pre, assiprest_original.atc as amm
LEFT JOIN assiprest_original.figuredivendita AS users ON users.fdv_IDFigura = pre.cq_IDFigura
LEFT JOIN assiprest_produzione.cliente AS cli ON cli.id = pre.cq_IDCliente
GROUP BY pre.cq_IDCessione
INTO OUTFILE 'C:/xampp/mysql/data/assiprest/preventivatore.csv'
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

标签: mysqlleft-join

解决方案


仅查看 SQL 就很难判断,但让我印象深刻的一件事是,您对第一个 CASE WHEN 语句使用了不同的表前缀。能起到作用吗?

WHEN (STRCMP( assi .atc_TipoSocieta, 'Ditta Individuale') = 0) THEN 4 WHEN (STRCMP( amm .atc_TipoSocieta , 'Ente') = 0) 或...


推荐阅读