在SQL SERVER中使用多表关系删除列的重复行
我包含一个商店谁出售宠物,如狗,猫等,为我的项目的数据库 我有表名Animal,其中有动物名称的详细信息,可以在另一个表中找到 说出动物的名字,无论是狗还是猫等 对于每种dscvr类型,我有4或5个类别,如昂贵、更昂贵、便宜、负担得起。我正在另一个表名Animal_DISCOVERY_category中维护该类别 我的最后一张表是动物的发现规则,动物的行为应该遵循这些规则在SQL SERVER中使用多表关系删除列的重复行,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我包含一个商店谁出售宠物,如狗,猫等,为我的项目的数据库 我有表名Animal,其中有动物名称的详细信息,可以在另一个表中找到 说出动物的名字,无论是狗还是猫等 对于每种dscvr类型,我有4或5个类别,如昂贵、更昂贵、便宜、负担得起。我正在另一个表名Animal_DISCOVERY_category中维护该类别 我的最后一张表是动物的发现规则,动物的行为应该遵循这些规则 ANIMAL - ANIMAL_NAME,ANIMAL_ID ANIMAL_DISCOVERY - ANIMAL_DISC
ANIMAL - ANIMAL_NAME,ANIMAL_ID
ANIMAL_DISCOVERY - ANIMAL_DISCOVERY_GROUP, ANIMAL_DISCOVERY_ID
ANIMAL_DISCOVERY_CATEGORY - ANIMAL_DISCOVERY_CATEGORY_ID,ANIMAL_DISCOVERY_CATEGORY_TEXT
ANIMAL_DISCOVERY_RULES - ANIMAL_DISCOVERY_RULES_ID,ANIMAL_DISCOVERY_ID,ANIMAL_DISCOVERY_CATEGORY_ID,ANIMAL_DISCOVERY_RULES_TEXT
现在是我的问题,我有很多关于动物发现规则的数据。对于每个动物类型及其类别,我在Animal_DISCOVERY_rules表中都有重复的规则,我只想删除其中一个
请帮助我编写一个可以执行此操作的查询
下面是查询和结果
select appl.ANIMAL_NAME,cate.ANIMAL_DISCOVERY_CATEGORY_TEXT,count(ANIMAL_DISCOVERY_RULES_TEXT) AS RULE_COUNT from ANIMAL_DISCOVERY_RULES rul INNER JOIN
ANIMAL_DISCOVERY_CATEGORY cate ON rul.ANIMAL_DISCOVERY_CATEGORY_ID=cate .ANIMAL_DISCOVERY_CATEGORY_ID INNER JOIN
ANIMAL_DISCOVERY grp ON rul.ANIMAL_DISCOVERY_ID=grp.ANIMAL_DISCOVERY_ID INNER JOIN
ANIMAL appl ON grp.ANIMAL_ID= appl.ANIMAL_ID
group by cate.ANIMAL_DISCOVERY_CATEGORY_TEXT,appl.ANIMAL_NAME
Animal Name Category Rules
A1 Dog Do not use hot water for bath
A1 Cat Do not use hot water for bath
A1 Dog Do not use hot water for bath
C1 Dog Give regular injection
C1 Parrot Do not give more then 2 chilli a day
我想要的是,对于动物名称A1,对于类别狗,有重复的规则。我想按类别删除所有动物名称组的所有这些类型的重复规则
希望它更清楚。我想你在寻找这样的东西:我的假设是你的动物\u发现\u规则\u id是pk,你不在乎你保留哪一行
;With DistinctDiscoveryRule AS
(
SELECT appl.ANIMAL_NAME
,cate.ANIMAL_DISCOVERY_CATEGORY_TEXT,
min(ANIMAL_DISCOVERY_RULES_ID) AS ANIMAL_DISCOVERY_RULES_ID
from ANIMAL_DISCOVERY_RULES rul INNER JOIN
ANIMAL_DISCOVERY_CATEGORY cate ON rul.ANIMAL_DISCOVERY_CATEGORY_ID=cate .ANIMAL_DISCOVERY_CATEGORY_ID INNER JOIN
ANIMAL_DISCOVERY grp ON rul.ANIMAL_DISCOVERY_ID=grp.ANIMAL_DISCOVERY_ID INNER JOIN ANIMAL appl ON grp.ANIMAL_ID= appl.ANIMAL_ID
group by cate.ANIMAL_DISCOVERY_CATEGORY_TEXT,appl.ANIMAL_NAME
)
Delete adr
FROM ANIMAL_DISCOVERY_RULES adr LEFT OUTER JOIN
DistinctDiscoveryRule d on adr.ANIMAL_DISCOVERY_RULES_ID = d.ANIMAL_DISCOVERY_RULES_ID
WHERE d.ANIMAL_DISCOVERY_RULES_ID IS NULL
您使用的是mysql还是sqlserver?这不是一回事。另外,你的问题很不清楚。一些样本数据和显示结果后可能会被忽略nice@SeanLange.. 它的sql Server请显示一些示例数据、预期输出以及您已经尝试过的内容。谢谢。@t\m。。这是我要选择的查询。。。选择应用动物名称、类别动物发现、类别文本,countANIMAL\u DISCOVERY\u RULES\u TEXT作为规则\u COUNT from ANIMAL\u DISCOVERY\u rul内部加入ANIMAL\u DISCOVERY\u CATEGORY\u ID=cate.ANIMAL\u DISCOVERY\u CATEGORY\u ID内部加入rul上的ANIMAL\u DISCOVERY\u ID=grp.ANIMAL\u DISCOVERY\u ID内部加入grp上的ANIMAL appl.ANIMAL\u ID=appl.ANIMAL\u ID=appl类别动物发现类别文本,应用动物名称