我已经学习SQL已有2周了,并且正在准备进行SQL测试。无论如何,我试图做这个问题:

对于表:

1   create table data {
2   id int,
3   n1 int not null,
4   n2 int not null,
5   n3 int not null,
6   n4 int not null,
7   primary key (id)
8   }


我需要返回元组(n1,n2,n3)的关系,其中n4的所有对应值均为0。问题要求我不使用子查询(嵌套选择/视图)来解决它

它还给了我一个示例表和查询的预期输出:

01  insert into data (id, n1, n2, n3, n4)
02  values (1, 2,4,7,0),
03  (2, 2,4,7,0),
04  (3, 3,6,9,8),
05  (4, 1,1,2,1),
06  (5, 1,1,2,0),
07  (6, 1,1,2,0),
08  (7, 5,3,8,0),
09  (8, 5,3,8,0),
10  (9, 5,3,8,0);


期望

(2,4,7)
(5,3,8)


而不是(1,1,2),因为在其中一种情况下,n4中有1分。

我能想到的最好的是:

1   SELECT DISTINCT n1, n2, n3
2   FROM data a, data b
3   WHERE a.ID <> b.ID
4         AND a.n1 = b.n1
5         AND a.n2 = b.n2
6         AND a.n3 = b.n3
7         AND a.n4 = b.n4
8         AND a.n4 = 0


但是我发现它也会打印(1,1,2),因为在示例(1,1,2,0)中,ID 5和6发生了两次。

任何建议将不胜感激。

最佳答案

在我看来,您可以尝试使用分组和having子句进行操作

Select N1,N2,N3 from Data group by N1,N2,N3 having Max(N4)=0 and MIN(N4)=0

10-08 19:45