Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用于查找具有值x的其他对应元素的元组的查询_Sql_Postgresql - Fatal编程技术网

Sql 用于查找具有值x的其他对应元素的元组的查询

Sql 用于查找具有值x的其他对应元素的元组的查询,sql,postgresql,Sql,Postgresql,如果我们有下表称为数据: (id、n1、n2、n3、n4) 111,2,4,7,0 444,1,1,2,1 555,1,1,2,0 777,5,3,8,0 我们如何只得到(2,4,7)和(5,3,8) 不起作用,因为它还返回(1,1,2)元组。我只需要始终具有n4=0的元组。您可以使用连接到self: SELECT d.n1, d.n2, d.n3 FROM data d LEFT JOIN data d2 ON (d.n1 = d2.n1 AND d.n2 = d2.n2 AND d.n3 =

如果我们有下表称为数据:
(id、n1、n2、n3、n4)
111,2,4,7,0
444,1,1,2,1
555,1,1,2,0
777,5,3,8,0

我们如何只得到(2,4,7)和(5,3,8)


不起作用,因为它还返回(1,1,2)元组。我只需要始终具有n4=0的元组。

您可以使用连接到self:

SELECT d.n1, d.n2, d.n3
FROM data d
LEFT JOIN data d2 ON (d.n1 = d2.n1 AND d.n2 = d2.n2 AND d.n3 = d3.n3 AND d.n4 != d2.n4)
WHERE n4 = 0 AND d2.id IS NULL

您可以使用连接到自身:

SELECT d.n1, d.n2, d.n3
FROM data d
LEFT JOIN data d2 ON (d.n1 = d2.n1 AND d.n2 = d2.n2 AND d.n3 = d3.n3 AND d.n4 != d2.n4)
WHERE n4 = 0 AND d2.id IS NULL
编辑:

如果1,1,2与1,2,1不同,则

SELECT
    MIN(id), n1, n2, n3
FROM
    data
WHERE
    n4 = 0
GROUP BY
    n1, n2, n3
HAVING
    COUNT(*) = 1
编辑:

如果1,1,2与1,2,1不同,则

SELECT
    MIN(id), n1, n2, n3
FROM
    data
WHERE
    n4 = 0
GROUP BY
    n1, n2, n3
HAVING
    COUNT(*) = 1

其中一个选项是使用:

选择n1、n2、n3
从数据
其中n4=0
除了
选择n1、n2、n3
从数据
其中n4 0

其中一个选项是使用:

选择n1、n2、n3
从数据
其中n4=0
除了
选择n1、n2、n3
从数据
其中n4 0
试验台:

create table data(id integer, n1 integer, n2 integer, n3 integer, n4 integer);

insert into data(id, n1, n2, n3, n4)
values (111, 2, 4, 7, 0), (444, 1, 1, 2, 1), 
       (555, 1, 1, 2, 0), (777, 5, 3, 8, 0);
假设n4不能为null或负值:

select n1, n2, n3 from data group by n1, n2, n3 having max(n4)=0;

 n1 | n2 | n3
----+----+----
  2 |  4 |  7
  5 |  3 |  8
(2 rows)
如果你不能假设:

insert into data(id, n1, n2, n3, n4)
values (881, 1, 1, 1, -1), (882, 1, 1, 1, null), (883, 1, 1, 1, 0);

select n1, n2, n3
from data
group by n1, n2, n3
having sum(case when n4=0 then 0 else 1 end)=0;

 n1 | n2 | n3
----+----+----
  2 |  4 |  7
  5 |  3 |  8
(2 rows)
试验台:

create table data(id integer, n1 integer, n2 integer, n3 integer, n4 integer);

insert into data(id, n1, n2, n3, n4)
values (111, 2, 4, 7, 0), (444, 1, 1, 2, 1), 
       (555, 1, 1, 2, 0), (777, 5, 3, 8, 0);
假设n4不能为null或负值:

select n1, n2, n3 from data group by n1, n2, n3 having max(n4)=0;

 n1 | n2 | n3
----+----+----
  2 |  4 |  7
  5 |  3 |  8
(2 rows)
如果你不能假设:

insert into data(id, n1, n2, n3, n4)
values (881, 1, 1, 1, -1), (882, 1, 1, 1, null), (883, 1, 1, 1, 0);

select n1, n2, n3
from data
group by n1, n2, n3
having sum(case when n4=0 then 0 else 1 end)=0;

 n1 | n2 | n3
----+----+----
  2 |  4 |  7
  5 |  3 |  8
(2 rows)
似乎很简单:

SELECT n1,
       n2,
       n3
FROM   data
GROUP  BY n1,
          n2,
          n3
HAVING Max(n4)=0 AND MIN(n4)=0;
这将仅基于n1、n2、n3元组进行选择,其中元组组组的n4的所有值均为0,这似乎相当简单:

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

这将仅基于n1、n2、n3元组进行选择,其中元组组组的n4的所有值均为0

,并且1,1,2与1,2,1?的计数相同,1,1,2与1,2,1?的计数相同?