1

我正在尝试解决这个问题:

“我们的数据:我们在数据库中有三个表:

Plant – describes the possible plants
Planted – whatever the gardener planted
Picked – the crop that was provided after the plantation."

我想要做的是加入 3 个这样的表:

SELECT plant.PlantID, plant.name, planted.Seeds, picked.Amount
FROM plant 
INNER JOIN planted ON plant.PlantID = planted.PlantFK
INNER JOIN picked ON picked.PlantFK = plant.PlantID

因此,我可以获得有关特定 PlantID 的数据,其中种植了多少种子以及采摘了多少种子。但由于某种原因,我得到了多个植物。因为数据库有超过 1 个关于植物的条目/采摘了相同的 PlantID..

我该如何修复该连接?

4

1 回答 1

3

只需使用聚合函数SUMCOUNT类似的函数GROUP BY plant.PlantID, plant.name

SELECT 
  plant.PlantID, 
  plant.name, 
  SUM(DISTINCT planted.Seeds) 'Planted', 
  SUM(DISTINCT picked.Amount) 'Picked' 
FROM plant 
INNER JOIN planted ON plant.PlantID = planted.PlantFK
INNER JOIN picked ON picked.PlantFK = plant.PlantID
GROUP BY   plant.PlantID, plant.name;

SQL 小提琴演示

如果您想获得没有种子且从未采摘过的植物,则必须使用LEFT JOINwithIFNULL()来获取零而不是NULLs ,如下所示:

SELECT 
  plant.PlantID, 
  plant.name, 
  SUM(IFNULL(DISTINCT planted.Seeds, 0)) 'Planted', 
  SUM(IFNULL(DISTINCT picked.Amount, 0)) 'Picked' 
FROM plant 
LEFT  JOIN planted ON plant.PlantID = planted.PlantID
LEFT  JOIN picked ON picked.PlantID = plant.PlantID
GROUP BY   plant.PlantID, plant.name;

更新的 SQL Fiddle 演示

于 2012-12-02T14:18:56.157 回答