繁体   English   中英

SQL left join排除不匹配的记录

[英]SQL left join exclude non matching records

我正在处理此查询(在 MySQL 5.6 上运行):

SELECT 
    veicoli_contratti.targa AS targa,
    veicoli_contratti.canone_noleggio AS canone,
    anag_convenzionati.nome AS convenzionato,
    SUM(noleggio_veicoli.fatt_prezzo_totale_noleggio) AS noleggi_incasso,
    noleggio_veicoli.modalita_noleggio,
    COUNT(DISTINCT noleggio_veicoli.id) AS noleggi    
FROM
    veicoli_contratti
        LEFT JOIN
    noleggio_veicoli ON veicoli_contratti.id = noleggio_veicoli.id_veicolo
        INNER JOIN
    anag_convenzionati ON veicoli_contratti.id_convenzionato = anag_convenzionati.id
WHERE
        (veicoli_contratti.data_cancellazione IS NULL)
        AND (veicoli_contratti.targa <> '')
        AND (noleggio_veicoli.data_cancellazione IS NULL)
        AND (anag_convenzionati.data_cancellazione IS NULL)
        AND (YEAR(noleggio_veicoli.rientro_data) = 2020)
        AND (MONTH(noleggio_veicoli.rientro_data) = 10)
        AND ((noleggio_veicoli.stato_noleggio = 'C')
              OR (noleggio_veicoli.stato_noleggio = 'F')
            )
        AND ((noleggio_veicoli.modalita_noleggio = 'S')
             OR (noleggio_veicoli.modalita_noleggio = 'OPO')
             OR (noleggio_veicoli.modalita_noleggio = 'M')
            )
        AND (veicoli_contratti.stato = 'OPERATIVA')
GROUP BY anag_convenzionati.id , veicoli_contratti.id , noleggio_veicoli.modalita_noleggio
ORDER BY convenzionato , noleggi DESC , canone DESC , noleggi_incasso DESC ;

我认为LEFT JOIN子句会产生一条记录,即使表noleggio_veicoli中没有匹配的记录,但这并没有发生。 结果仅包括在veicoli_contrattinoleggio_veicoli之间找到匹配项的记录。 我还尝试在WHERE子句中添加OR noleggio_veicoli.id IS NULL但这不是解决方案。 我怎样才能解决这个问题? 我创建了一个 SQL 小提琴在这里试试这个

你的理解是正确的。 但是, where子句正在“撤消” LEFT JOIN 为什么?

你有这样的条件:

   AND ((noleggio_veicoli.stato_noleggio = 'C') OR (noleggio_veicoli.stato_noleggio = 'F'))

好吧, NULL这些条件,所以不匹配项被过滤掉了。 此条件(连同其他条件)应包含在ON子句中。 对于这个,它看起来像:

   AND noleggio_veicoli.stato_noleggio IN ('C', 'F')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM