使用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')

08-28 02:48