我是SQL Server的新手,如果某个群组包含在另一个群组中,我搜索了一个找到的解决方案。
查询结果应为grp_id 2,因为“A”+“B”包含在grp 3和5中。
结果应该是包含在其他组中的组的grp_id。有了这个结果,我将更新另一个表,与grp_id结合。
结果应为:
+----+
| id |
+----+
| 2 |
+----+
我坚持使用SQL,因为我没有找到比较组的解决方案。这个想法是使用按位比较。但为此,我必须在一个字段中添加每个项目的值。我认为可能有一种更简单的方法。
谢谢你,最诚挚的问候! 埃里克
create table tmp_grpid (grp_id int);
create table tmp_grp (grp_id int, item_val nvarchar(10));
insert into tmp_grpid(grp_id) values (1);
insert into tmp_grpid(grp_id) values (2);
insert into tmp_grpid(grp_id) values (3);
insert into tmp_grpid(grp_id) values (4);
insert into tmp_grpid(grp_id) values (5);
--
insert into tmp_grp(grp_id, item_val) values (1, 'A');
insert into tmp_grp(grp_id, item_val) values (2, 'A');
insert into tmp_grp(grp_id, item_val) values (2, 'B');
insert into tmp_grp(grp_id, item_val) values (3, 'A');
insert into tmp_grp(grp_id, item_val) values (3, 'B');
insert into tmp_grp(grp_id, item_val) values (3, 'C');
insert into tmp_grp(grp_id, item_val) values (4, 'A');
insert into tmp_grp(grp_id, item_val) values (4, 'C');
insert into tmp_grp(grp_id, item_val) values (4, 'D');
insert into tmp_grp(grp_id, item_val) values (5, 'A');
insert into tmp_grp(grp_id, item_val) values (5, 'B');
insert into tmp_grp(grp_id, item_val) values (5, 'E');
答案 0 :(得分:1)
吉兹!
从技术上讲,第一组在所有其他组中都可以找到吗?所以,首先交叉连接到自身最好的条件是值是相同的并且组是不同的,但在我们这样做之前,我们需要知道有多少项属于每个组,这就是为什么我们有第一个选择一个包含每个组元素数的组,然后将其与交叉连接一起加入......希望这会有所帮助。
select distinct dist_grpid
from
(select grp_id, count(*) cc from tmp_grp group by grp_id) g
inner join
(
select dist.grp_id dist_grpid, tmp_grp.grp_id, count(*) cc
from
tmp_grp dist
cross join tmp_grp
where
dist.item_val = tmp_grp.item_val and
dist.grp_id != tmp_grp.grp_id
group by
dist.grp_id,
tmp_grp.grp_id
) cj on g.grp_id = cj.dist_grpid and g.cc = cj.cc