Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关系为1:X的MySQL左连接上的和_Mysql - Fatal编程技术网

关系为1:X的MySQL左连接上的和

关系为1:X的MySQL左连接上的和,mysql,Mysql,好的,首先,我要更改表、字段和值的名称,我只是保留数据库的结构,让您理解 现在,让我们支持我有一个表people,其中包含字段,id,age,country和language。另一个表foods,其中包含表people中每个人吃的食物,字段:person\u id,food,units。 注意:food是char,不是另一个表的ID,我无法更改此结构 现在,让我们放一些数据: 人 食品 好吧,我需要的是拿到一个人吃的身份证,年龄,国家和苹果和葡萄(忽略比萨饼)。在本例中,如果我查找ID 1

好的,首先,我要更改表、字段和值的名称,我只是保留数据库的结构,让您理解

现在,让我们支持我有一个表
people
,其中包含字段,
id
age
country
language
。另一个表
foods
,其中包含表
people
中每个人吃的食物,字段:
person\u id
food
units
。 注意:
food
char
,不是另一个表的ID,我无法更改此结构

现在,让我们放一些数据:

食品

好吧,我需要的是拿到一个人吃的
身份证
年龄
国家
苹果
葡萄
(忽略
比萨饼
)。在本例中,如果我查找ID 1,我应该得到:

ID | AGE | COUNTRY | UNITS 
1  |  25 |   usa   | 26
对于ID 2:

ID | AGE | COUNTRY | UNITS 
2  |  46 |   mex   | 3
选择p.Id、p.年龄、p.国家/地区、总和(f.单位)
从作为p的人
在f.person\u id=p.id上以f的形式加入食物
f.food“比萨饼”在哪里
按p.id、p.age、p.country分组
选择p.Id、p.Age、p.country、总和(f.units)
从作为p的人
在f.person\u id=p.id上以f的形式加入食物
f.food“比萨饼”在哪里
按p.id、p.age、p.country分组
选择p.id、p.age、p.country、sum(f.units)作为单位
来自人民党
在f.person_id=p.id上加入食物f
f.food“比萨饼”在哪里
按p.id、f.food分组
选择p.id、p.age、p.country、sum(f.units)作为单位
来自人民党
在f.person_id=p.id上加入食物f
f.food“比萨饼”在哪里
按p.id、f.food分组
如果您需要其他食物组合,只需编辑子句中的

如果您需要其他食物组合,只需编辑
条款中的
内容。


根据现有数据,1人和2人的单位不是应该分别为26和3吗?根据现有数据,1人和2人的单位不是应该分别为26和3吗?嗯,我有很多不同的
食物
,所以,我将尝试
其中f.food='apple'或f.food='grape'
而不是
其中f.food'Pizza'
,而且它需要是一个
左连接
而不是一个
内部
,但我在我的邮件正文中没有具体说明。不管怎样,我明白你的意思了,把戏就在这群人身上。不用担心,你可以很容易地将它改为left join,我会将where子句改为where子句,其中f.food IN('apple','grape')
,这样你就不必继续添加
语句,尽管这段代码可以回答问题,提供关于为什么和/或如何回答该问题的额外背景将显著提高其长期价值。请您的回答添加一些解释。好吧,我有很多不同的
食物
,因此,我将尝试
其中f.food='apple'或f.food='grape'
,而不是
其中f.food'Pizza'
,而且,它需要是
左连接
而不是
内部
,但我在邮件正文中没有具体说明。不管怎样,我明白你的意思了,把戏就在这群人身上。不用担心,你可以很容易地将它改为left join,我会将where子句改为where子句,其中f.food IN('apple','grape')
,这样你就不必继续添加
语句,尽管这段代码可以回答问题,提供关于为什么和/或如何回答该问题的额外背景将显著提高其长期价值。请在您的回答中添加一些解释。您确定
f.food
?尽管此代码可能会回答问题,但提供有关为什么和/或如何回答问题的其他上下文将显著提高其长期价值。请在您的回答中添加一些解释。您需要人均食品总消费量还是人均食品总消费量?您确定
f.food
?尽管此代码可能会回答问题,但提供有关为什么和/或如何回答问题的附加上下文将显著提高其长期价值。请在回答中添加一些解释。您需要人均食物总消费量还是人均食物总消费量?
ID | AGE | COUNTRY | UNITS 
1  |  25 |   usa   | 26
ID | AGE | COUNTRY | UNITS 
2  |  46 |   mex   | 3
SELECT p.Id, p.Age,p.country, sum(f.units)
FROM people AS p
INNER JOIN foods AS f ON f.person_id = p.id
WHERE f.food <> 'Pizza'
GROUP BY p.id,p.age,p.country
select p.id, p.age, p.country, sum(f.units) as units 
from people p 
join foods f on f.person_id = p.id 
where f.food <> 'Pizza' 
group by p.id, f.food
select p.id, p.age, p.country, sum(f.units) as units
from people p join foods f
on (p.id = foods.person_id and f.food in ('apple', 'grape'))
group by p.id, p.age, p.country
SELECT p.*, SUM(f.units)
FROM people p
LEFT JOIN foods f
ON f.person_id = p.id
  AND f.food in('apple','grape')
GROUP BY p.id
select 
t1.id, t1.age, t1.country, sum(t2.units)
from people as t1, foods as t2
where 
t1.id = t2.person_id and t2.food != 'pizza'
group by t1.id 
order by t1.id