使用mysql非常新,如果这个问题真的很简单,请原谅。如果有人至少可以建议我应该研究的主题,那就太好了。
我有3个表,用户,计算机,组件。 (这只是一个例子)。
user computer component
---- ------- ----
id id id
firstName user_id computer_id
lastName name componentName
type componentValue
一个用户可能有多台计算机,而这些计算机又可能具有多个属性。
我正在尝试编写一个查询,该查询可以使所有具有其“ Macintosh”计算机的所有用户ID都包含具有“ 16GB”值的所有“ ram”组件。
到目前为止,我一直在努力使计数正确,但是已经编写了如下内容:
select user.id from user
inner join computer on user.id=computer.user_id and computer.name='Macintosh'
inner join component on computer.id=component.computer_id and component.componentName='ram'
having count(component.propertyName='ram')=count(component.propertyValue='16GB');
预先感谢您的任何建设性反馈。
最佳答案
您可以过滤componentValue ='16GB'
select user.id
from user
inner join computer on user.id=computer.user_id and computer.name='Macintosh'
inner join component on computer.id=component.computer_id
and component.componentName='ram'
and component.componentValue = '16GB'
如果您只想使用只有16GB RAM的计算机,则可以使用
select user.id
from user
inner join computer on user.id=computer.user_id and computer.name='Macintosh'
and computer.id not (
select component.computer_id
from component
where component.componentName='ram'
and component.componentValue <> '16GB')