2015-12-15 96 views
1

我正在清理我的数据库的斯芬克斯索引,并有一个反复出现的错误,在我正在运行的数据中显着。查找缺少的属性表 - Mysql

为了保持这适用于其他人,我会尽我所能来保持这种概念而不是个人。

我有表属性与数值:1,2,3,4,5 ...等

我有资产的表。 资产与属性具有一对多的关系。

要处理1:N关系,我们有一张表来处理名为asset_items的关系。

每个资产将举行3个属性:1 2 3 &

属性

id | value 
___|________ 
1 | month 
2 | day 
3 | year 

资产

id | owner_id 
___|_________ 
1 | 512 

资产项目

一套好的数据会像这个:

id | asset_id | attribute_id | attribute_value 
___|__________|______________|_________________ 
1 | 1  | 1   | March 
2 | 1  | 2   | 2 
3 | 1  | 3   | 2015 

因为我的错误我正在寻找类似缺少2.除息的attribute_id的所有资产的例子:

id | asset_id | attribute_id | attribute_value 
____|___________|______________|_________________ 
45 | 22  | 1   | October 
47 | 22  | 3   | 1996 

我的SQL迄今:

select * 
from asset_items 
group by attribute_id 
having count(attribute_id = 2) = 0 

但不幸的是,这没有任何回报。正确的SQL应该返回> 500行。

回答

0

您可以有条件聚集做到这一点:

select asset_id 
from asset_items 
group by asset_id 
having sum(case when attribute_id = 2 then 1 else 0 end) = 0 
+0

它返回更少的行比我期待的,但我相信这是因为我以前清理大多数起来的手动,因为我是贯穿其中。我在阅读时明白你的答案,但我自己从来没有想到过。我非常感谢你的回答,我很高兴你能理解我的例子。 – domdambrogia