查找缺少的属性表-Mysql
我正在清理数据库以进行sphinx索引,在我运行的数据中有一个反复出现的bug 为了让这一点适用于其他人,我将尽最大努力保持这一概念性而非个人性 我有一个带有数值的属性表:1,2,3,4,5。。。等等 我有一张资产表。 资产与属性具有1对多关系 为了处理1:N关系,我们有一个表来处理称为asset\u items的关系 每个资产将包含3个属性:1、2和3 属性 资产 资产项目 一组好的数据应该是这样的:查找缺少的属性表-Mysql,mysql,Mysql,我正在清理数据库以进行sphinx索引,在我运行的数据中有一个反复出现的bug 为了让这一点适用于其他人,我将尽最大努力保持这一概念性而非个人性 我有一个带有数值的属性表:1,2,3,4,5。。。等等 我有一张资产表。 资产与属性具有1对多关系 为了处理1:N关系,我们有一个表来处理称为asset\u items的关系 每个资产将包含3个属性:1、2和3 属性 资产 资产项目 一组好的数据应该是这样的: id | asset_id | attribute_id | attribute_value
id | asset_id | attribute_id | attribute_value
___|__________|______________|_________________
1 | 1 | 1 | March
2 | 1 | 2 | 2
3 | 1 | 3 | 2015
由于我的bug,我正在寻找一个类似于所有缺少属性_id为2的资产的示例。例:
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行。您可以使用条件聚合来执行此操作:
select asset_id
from asset_items
group by asset_id
having sum(case when attribute_id = 2 then 1 else 0 end) = 0
您可以使用条件聚合执行此操作:
select asset_id
from asset_items
group by asset_id
having sum(case when attribute_id = 2 then 1 else 0 end) = 0
它返回的行数比我预期的要少,但我相信这是因为我以前在运行它们时手动清理了大部分行。当我读到你的答案时,我明白了,但是,伙计,我永远不会独自想出这个答案。我真的很感谢你的回答,我很高兴你能理解我的例子。它返回的行数比我预期的少,但我相信这是因为我之前在运行它们时手动清理了大部分行。当我读到你的答案时,我明白了,但是,伙计,我永远不会独自想出这个答案。我真的很感激你的回答,我很高兴你能理解我的例子。
select asset_id
from asset_items
group by asset_id
having sum(case when attribute_id = 2 then 1 else 0 end) = 0