我在查询中使用多个左连接时遇到了一些麻烦。有些表与左表是一对一的关系,有些是一对多的关系。查询如下所示:
Select
files.filename,
coalesce(count(distinct case
when dm_data.weather like '%clear%' then 1
end),
0) as clear,
coalesce(count(distinct case
when dm_data.weather like '%lightRain%' then 1
end),
0) as lightRain,
coalesce(count(case
when kc_data.type like '%bicycle%' then 1
end),
0) as bicycle,
coalesce(count(case
when kc_data.type like '%bus%' then 1
end),
0) as bus,
coalesce(count(case
when kpo_data.movement like '%walking%' then 1
end),
0) as walking,
coalesce(count(case
when kpo_data.type like '%pedestrian%' then 1
end),
0) as pedestrian
from
files
left join
dm_data ON dm_data.id = files.id
left join
kc_data ON kc_data.id = files.id
left join
kpo_data ON kpo_data.id = files.id
where
files.filename in (X, Y, Z, ........)
group by files.filename;
在这里,dm_data 表与“files”表具有一对一的关系(这就是我使用“distinct”的原因),而 kc_data 和 kpo_data 数据与“files”表具有一对多的关系。(kc_data 和 kpo_data 可以针对一个 files.id 有 10 到 20 行)。此查询工作正常。
当我添加另一个左连接和另一个一对多表 pd_markings(它可以有 100 行针对一个 files.id)时,就会出现问题。
Select
files.filename,
coalesce(count(distinct case
when dm_data.weather like '%clear%' then 1
end),
0) as clear,
coalesce(count(distinct case
when dm_data.weather like '%lightRain%' then 1
end),
0) as lightRain,
coalesce(count(case
when kc_data.type like '%bicycle%' then 1
end),
0) as bicycle,
coalesce(count(case
when kc_data.type like '%bus%' then 1
end),
0) as bus,
coalesce(count(case
when kpo_data.movement like '%walking%' then 1
end),
0) as walking,
coalesce(count(case
when kpo_data.type like '%pedestrian%' then 1
end),
0) as pedestrian,
**coalesce(count(case
when pd_markings.movement like '%walking%' then 1
end),
0) as walking**
from
files
left join
dm_data ON dm_data.id = files.id
left join
kc_data ON kc_data.id = files.id
left join
kpo_data ON kpo_data.id = files.id
left join
**kpo_data ON pd_markings.id = files.id**
where
files.filename in (X, Y, Z, ........)
group by files.filename;
现在所有的值都变成了彼此的倍数。有任何想法吗???
请注意,前两列返回 1 或 0 值。这实际上是期望的结果,因为一对一的关系表对于任何 files.id 只有 1 或 0 行,所以如果我不使用“Distinct”,那么结果值是错误的(我猜是因为其他针对同一个 file.id 返回超过一行的表)不,不幸的是,我的表没有自己的唯一 ID 列,除了“文件”表。