mysql连接和计数字段值

问题描述 投票:0回答:1

使用mysql非常新,所以如果这个问题非常简单,请原谅。如果有人能够至少提出我应该研究的主题,那将会很棒。

我有3个表,用户,计算机,组件。 (这只是一个例子)。

user        computer      component
----        -------       ----
id          id            id
firstName   user_id       computer_id
lastName    name          componentName
            type          componentValue  

用户可能有多台计算机,而这些计算机又可能具有多个属性。

我正在尝试编写一个查询,该查询可以让所有“Macintosh”计算机的所有用户ID都包含所有“ram”组件,其中包含“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'
having count(component.propertyName='ram')=count(component.propertyValue='16GB');

提前感谢任何建设性的反馈。

mysql join
1个回答
0
投票

你可以过滤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内存的计算机,您可以使用

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')  
© www.soinside.com 2019 - 2024. All rights reserved.