2012-07-20 157 views
1

我有两个表格,一个叫做许可证,一个叫做系统。 现在许可证表保存系统ID和许可证类型(完整或试用)。 和系统表保存系统mac_address。查找不重复记录

现在一个系统可能有多个试用许可证和一个完整许可证。 现在我想找到完整版本尚未生成的系统,并将它们与它们的mac_address一起分组。

请小小的建议就足够了。

回答

1
select 
    s.* 
from 
    systems as s 
where 
    s.system_id not in 
    (select l.system_id from licenses as l where l.licence_type='full') 
+1

相当接近,但它也显示了为同一个mac_address生成的试用版记录... – 2012-07-20 09:51:28

+1

根据你的回答,感谢你我做了一些破解,最后我得到了我想要的结果。 谢谢先生。 – 2012-07-20 12:06:28

+1

选择 系统。*, 许可。* 从 许可证作为许可 内部联接系统,系统上ystems.id = License.system_id WHERE system.mac_address NOT IN ( 从许可证作为LIC选择system.mac_address 内对 lic.system_id = s.id 其中lic.license_type = '全' ) 加入系统为S使用此查询我得到了我的结果。 – 2012-07-20 12:12:32

0

所以如果我了解你,你需要找到所有没有列出“完整”许可证的系统。在纯SQL中,您可以使用LEFT JOIN实现此目的。像

SELECT DISTINCT s.system_id,s.mac_address 
FROM systems s 
LEFT JOIN licences l ON s.system_id=l.system_id AND l.licence_type = 'full' 
WHERE l.licence_id IS NULL 
+1

是的先生,但使用我的答案查询我发现结果我希望得到。 我也很感激你的答案也给了我想要得到我想要得到的东西。 – 2012-07-21 03:25:13

0

我的东西真的不明白你的问题,但你不能让唯一的一列?

+1

我无法根据其mac_address来管理系统及其许可证。 现在系统可以使用相同的mac_address但不同的寄存器键添加多次。 所以我需要跟踪所有信息。 – 2012-07-20 09:55:49