Sql 连接其他表后获取表列的单个计数

Sql 连接其他表后获取表列的单个计数,sql,mysql,Sql,Mysql,加入其他人后,我很难准确计算列数。当一个列被联接时,我仍然希望它所联接的表有一个不同的计数 SELECT COUNT(meals.id) AS countMeals, COUNT(food_groups.id) AS countGroups, COUNT(ingrediants.id) AS countIngrediants FROM restaurants INNER JOIN meals ON restaurants.id = meals.re

加入其他人后,我很难准确计算列数。当一个列被联接时,我仍然希望它所联接的表有一个不同的计数

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id
一家餐馆有多种膳食,膳食有多种食物组,食物组有多种配料

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id
通过餐厅id,我希望能够计算出餐厅有多少餐、食物组和配料

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id
当我加入食物小组时,吃饭的次数也会增加(我知道这是一种自然的行为,我只是不知道如何得到我所需要的东西。)我已经尝试了不同的方法和我发现的其他方法,但似乎没有任何效果。我希望将此保留为一个查询,而不是将其拆分为多个查询

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id

谢谢

我认为,您将不得不进行子查询。比如:

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id
SELECT 
    (SELECT COUNT(1) FROM meals m WHERE m.restaurant_id = r.id) AS countMeals,
    (SELECT COUNT(1) FROM food_groups fg WHERE fg.meal_id = m.id) AS countGroups,
    (SELECT COUNT(1) FROM ingrediants i WHERE i.food_group_id = fg.id) AS countGroups
FROM restaurants r

我认为,您将不得不进行子查询。比如:

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id
SELECT 
    (SELECT COUNT(1) FROM meals m WHERE m.restaurant_id = r.id) AS countMeals,
    (SELECT COUNT(1) FROM food_groups fg WHERE fg.meal_id = m.id) AS countGroups,
    (SELECT COUNT(1) FROM ingrediants i WHERE i.food_group_id = fg.id) AS countGroups
FROM restaurants r

DISTINCT
进入计数

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id
SELECT 
    COUNT(DISTINCT meals.id) AS countMeals,
    COUNT(DISTINCT food_groups.id) AS countGroups,
    COUNT(DISTINCT ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id

DISTINCT
进入计数

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id
SELECT 
    COUNT(DISTINCT meals.id) AS countMeals,
    COUNT(DISTINCT food_groups.id) AS countGroups,
    COUNT(DISTINCT ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id

你把你的独特的和在哪列?使用COUNT()时,您需要在括号内执行distinct操作您需要在一列上执行distinct操作,该列与您要计算的内容不同。例如:

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id
SELECT
    COUNT(DISTINCT M.id) AS count_meals,
    COUNT(DISTINCT FG.id) AS count_food_groups,
    COUNT(DISTINCT I.id) AS count_ingredients
FROM
    Restaurants R
INNER JOIN Meals M ON M.restaurant_id = R.id
INNER JOIN Food_Groups FG ON FG.meal_id = M.id
INNER JOIN Ingredients I ON I.food_group_id = FG.id
WHERE 
    R.id='43'

因为你选择的是一家餐馆,所以你不需要一组一组的人。另外,除非这是非英语语言,否则我认为你拼错了成分。

你把你的不同成分放在哪里了,放在了哪些栏?使用COUNT()时,您需要在括号内执行distinct操作您需要在一列上执行distinct操作,该列与您要计算的内容不同。例如:

SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id
SELECT
    COUNT(DISTINCT M.id) AS count_meals,
    COUNT(DISTINCT FG.id) AS count_food_groups,
    COUNT(DISTINCT I.id) AS count_ingredients
FROM
    Restaurants R
INNER JOIN Meals M ON M.restaurant_id = R.id
INNER JOIN Food_Groups FG ON FG.meal_id = M.id
INNER JOIN Ingredients I ON I.food_group_id = FG.id
WHERE 
    R.id='43'
因为你选择的是一家餐馆,所以你不需要一组一组的人。此外,除非这是非英语语言,否则我认为您拼错了配料。

如果您的餐厅没有邮件,您应该使用
左键加入
,否则您将不知道!如果你的餐厅没有邮件,你应该使用
左加入
,否则你不会知道!
SELECT 
    COUNT(meals.id) AS countMeals,
    COUNT(food_groups.id) AS countGroups,
    COUNT(ingrediants.id) AS countIngrediants
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id
INNER JOIN
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN
    ingrediants ON food_groups.id = ingrediants.food_group_id     
WHERE 
    restaurants.id='43'
GROUP BY
    restaurants.id