初学者有SQL查询的困难

时间:2011-03-13 16:03:03

标签: mysql sql database

我已经学习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发生两次。

任何建议都会非常感激。

4 个答案:

答案 0 :(得分:2)

在我看来,您可以尝试使用分组和

之类的子句
Select N1,N2,N3 from Data group by N1,N2,N3 having Max(N4)=0 and MIN(N4)=0

答案 1 :(得分:1)

因为这是家庭作业......首先考虑分组。

答案 2 :(得分:0)

您还可以使用两个查询和减号运算符。

答案 3 :(得分:0)

为什么Max和Min什么时候可以利用像joelt这样的分组?

SELECT n1,
       n2,
       n3
FROM   data
GROUP  BY n1,
          n2,
          n3
HAVING Max(n4)=0 AND Min(n4)=0;

将是一个选项