MYSQL-左连接有问题
我正在寻找Java swing中的一个bug—动态生成查询的不是我的代码。 很抱歉提出这么大的问题,但我必须在这里报告:MYSQL-左连接有问题,mysql,left-join,Mysql,Left Join,我正在寻找Java swing中的一个bug—动态生成查询的不是我的代码。 很抱歉提出这么大的问题,但我必须在这里报告: select b.CodiceCommercialeRiferimento as "Comm. Rif.", b.PartitaIVA as "PartitaIVA", b.FlgBusteCartotecnica as "Tipo Prodotto", b.ClasseMerceologica as "Cl.Merc.", Periodo0.V as Periodo0,
select
b.CodiceCommercialeRiferimento as "Comm. Rif.",
b.PartitaIVA as "PartitaIVA",
b.FlgBusteCartotecnica as "Tipo Prodotto",
b.ClasseMerceologica as "Cl.Merc.",
Periodo0.V as Periodo0,
Periodo3.V as Periodo3,
Periodo4.V as Periodo4
from (
select distinct
if (CodiceCommRif is null, '', DescrizioneCommRif) as CodiceCommercialeRiferimento,
CommercialeRiferimento,
trim(concat(bolle.CodiceCliente, ' - ', AnagraficaClientiPI.RagioneSociale1)) as CodiceClientePI,
trim(concat(AnagraficaClientiPI.PartitaIVA, ' - ', AnagraficaClientiPI.RagioneSociale1)) as PartitaIVA,
bolle.FlgBusteCartotecnica,
if(DescrizioneCLM is null, '', DescrizioneCLM) as ClasseMerceologica
from bolle
left join CodiciCommercialiRiferimento on CodiceCommRif = CommercialeRiferimento
inner join AnagraficaClienti as anagraficaclientiPI on bolle.codicecliente = anagraficaclientiPI.codicecliente
left join classemerceologica on bolle.ClasseMerceologica = classemerceologica.CodiceCLM
where
CommercialeRiferimento in ('001')
and AnagraficaClientiPI.PartitaIVA in ('0569XXXX000')
and bolle.FlgBusteCartotecnica in ('B','C')
and bolle.ClasseMerceologica like '%%'
) as b left join (
select distinct
if (CodiceCommRif is null, '', DescrizioneCommRif) as CodiceCommercialeRiferimento,
CommercialeRiferimento,
trim(concat(bolle.CodiceCliente, ' - ', AnagraficaClientiPI.RagioneSociale1)) as CodiceClientePI,
trim(concat(AnagraficaClientiPI.PartitaIVA, ' - ', AnagraficaClientiPI.RagioneSociale1)) as PartitaIVA,
bolle.FlgBusteCartotecnica,if(DescrizioneCLM is null, '', DescrizioneCLM) as ClasseMerceologica,
sum(if (TipoDocumento = 'N', -ValoreConsegnato, ValoreConsegnato)) as V
from bolle
inner join bollevalori on bolle.recordid = bollevalori.recordid
left join CodiciCommercialiRiferimento on CodiceCommRif = CommercialeRiferimento
inner join AnagraficaClienti as anagraficaclientiPI on bolle.codicecliente = anagraficaclientiPI.codicecliente
left join classemerceologica on bolle.ClasseMerceologica = classemerceologica.CodiceCLM
where
CommercialeRiferimento in ('001')
and AnagraficaClientiPI.PartitaIVA in ('0569XXXX000')
and bolle.FlgBusteCartotecnica in ('B','C')
and bolle.ClasseMerceologica like '%%'
and DataFattura between '2010-01-01' and '2010-11-30'
Group by CommercialeRiferimento,AnagraficaClientiPI.PartitaIVA,bolle.FlgBusteCartotecnica,ClasseMerceologica
) as Periodo0 on
b.CommercialeRiferimento = Periodo0.CommercialeRiferimento
and b.CodiceClientePI = Periodo0.CodiceClientePI
and b.FlgBusteCartotecnica = Periodo0.FlgBusteCartotecnica
and b.ClasseMerceologica = Periodo0.ClasseMerceologica
left join (
select distinct
if (CodiceCommRif is null, '', DescrizioneCommRif) as CodiceCommercialeRiferimento,
CommercialeRiferimento,
trim(concat(bolle.CodiceCliente, ' - ', AnagraficaClientiPI.RagioneSociale1)) as CodiceClientePI,
trim(concat(AnagraficaClientiPI.PartitaIVA, ' - ', AnagraficaClientiPI.RagioneSociale1)) as PartitaIVA,
bolle.FlgBusteCartotecnica,
if(DescrizioneCLM is null, '', DescrizioneCLM) as ClasseMerceologica,
sum(if (TipoDocumento = 'N', -ValoreConsegnato, ValoreConsegnato)) as V
from bolle
inner join bollevalori on bolle.recordid = bollevalori.recordid
left join CodiciCommercialiRiferimento on CodiceCommRif = CommercialeRiferimento
inner join AnagraficaClienti as anagraficaclientiPI on bolle.codicecliente = anagraficaclientiPI.codicecliente
left join classemerceologica on bolle.ClasseMerceologica = classemerceologica.CodiceCLM
where
CommercialeRiferimento in ('001')
and AnagraficaClientiPI.PartitaIVA in ('0569XXXX000')
and bolle.FlgBusteCartotecnica in ('B','C')
and bolle.ClasseMerceologica like '%%'
and DataFattura between '2008-01-01' and '2008-11-30'
Group by CommercialeRiferimento,AnagraficaClientiPI.PartitaIVA,bolle.FlgBusteCartotecnica,ClasseMerceologica
) as Periodo3 on
b.CommercialeRiferimento = Periodo3.CommercialeRiferimento
and b.CodiceClientePI = Periodo3.CodiceClientePI
and b.FlgBusteCartotecnica = Periodo3.FlgBusteCartotecnica
and b.ClasseMerceologica = Periodo3.ClasseMerceologica
left join (
select distinct
if (CodiceCommRif is null, '', DescrizioneCommRif) as CodiceCommercialeRiferimento,
CommercialeRiferimento,
trim(concat(bolle.CodiceCliente, ' - ', AnagraficaClientiPI.RagioneSociale1)) as CodiceClientePI,
trim(concat(AnagraficaClientiPI.PartitaIVA, ' - ', AnagraficaClientiPI.RagioneSociale1)) as PartitaIVA,
bolle.FlgBusteCartotecnica,
if(DescrizioneCLM is null, '', DescrizioneCLM) as ClasseMerceologica,
sum(if (TipoDocumento = 'N', -ValoreConsegnato, ValoreConsegnato)) as V
from bolle
inner join bollevalori on bolle.recordid = bollevalori.recordid
left join CodiciCommercialiRiferimento on CodiceCommRif = CommercialeRiferimento
inner join AnagraficaClienti as anagraficaclientiPI
on bolle.codicecliente = anagraficaclientiPI.codicecliente
left join classemerceologica on bolle.ClasseMerceologica = classemerceologica.CodiceCLM
where
CommercialeRiferimento in ('001')
and AnagraficaClientiPI.PartitaIVA in ('0569XXXX000')
and bolle.FlgBusteCartotecnica in ('B','C')
and bolle.ClasseMerceologica like '%%'
and DataFattura between '2008-01-01' and '2008-12-31'
Group by CommercialeRiferimento,AnagraficaClientiPI.PartitaIVA,bolle.FlgBusteCartotecnica,ClasseMerceologica
) as Periodo4 on
b.CommercialeRiferimento = Periodo4.CommercialeRiferimento
and b.CodiceClientePI = Periodo4.CodiceClientePI
and b.FlgBusteCartotecnica = Periodo4.FlgBusteCartotecnica
and b.ClasseMerceologica = Periodo4.ClasseMerceologica
where
Periodo0.V is not null
or Periodo3.V is not null
or Periodo4.V is not null
Group by b.CommercialeRiferimento,b.PartitaIVA,b.FlgBusteCartotecnica,b.ClasseMerceologica;
这个查询更大,我减少了它,所以它保留了这个问题。
结果如下:
"Comm. Rif." PartitaIVA "Tipo Prodotto" Cl.Merc. Periodo0 Periodo3 Periodo4
Stecca "0569XXXX000 - POSTEM SPA" B "Commesse buste articoli speciali B" 2199544.40 NULL NULL
Stecca "0569XXXX000 - POSTEM SPA" B "Inserti buste/sacchetti B" 3627807.30 NULL NULL
Stecca "0569XXXX000 - POSTEM SPA" B "Prodotti finiti buste/sacchetti B" 8007.80 NULL NULL
所以最后两列为空NULL,而我希望有一些值。我试图通过删除上一个sql代码组,但意外地发现:
"Comm. Rif." PartitaIVA "Tipo Prodotto" Cl.Merc. Periodo0 Periodo3 Periodo4
Stecca "0569XXXX000 - POSTEM SPA" B "Inserti buste/sacchetti B" 3627807.30 NULL NULL
Stecca "0569XXXX000 - POSTEM SPA" B "Prodotti finiti buste/sacchetti B" 8007.80 NULL NULL
Stecca "0569XXXX000 - POSTEM SPA" B "Commesse buste articoli speciali B" 2199544.40 NULL NULL
Stecca "0569XXXX000 - POSTEM SPA" B "Commesse buste articoli speciali B" NULL 3714106.25 4210464.05
Stecca "0569XXXX000 - POSTEM SPA" B "Inserti buste/sacchetti B" NULL 2080109.06 2487643.18
似乎分组。。。不分组!:-有什么想法吗?Group by与聚合函数一起使用,此查询没有 如果执行类似于以下内容的查询:
select a, b, c from a_table group by a, b
您将获得:
a列和b列的不同值
c的一个待定值
这就是为什么分组不分组,而不是这样做的原因。您可以尝试选择三个“V”列的总和吗?而且我认为你不需要WHERE子句……这个总数似乎有用!!!你能解释一下原因吗?我认为其他条件的WHERE是,这是一个生成的查询。尝试使用