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
Postgresql 单个语句中存在多个select_Postgresql_Select_Multiple Columns_Exists - Fatal编程技术网

Postgresql 单个语句中存在多个select

Postgresql 单个语句中存在多个select,postgresql,select,multiple-columns,exists,Postgresql,Select,Multiple Columns,Exists,我有以下代码: DROP SCHEMA IF EXISTS s CASCADE; CREATE SCHEMA s; CREATE TABLE s.t1 ( id1 BigInt, id2 BigInt, CONSTRAINT "pk1" PRIMARY KEY (id1) ) WITH(OIDS=FALSE); INSERT INTO s.t1 (id1, id2) VALUES (2, 22); INSERT INTO s.t1 (id1, id2)

我有以下代码:

DROP SCHEMA IF EXISTS s CASCADE;  

CREATE SCHEMA s;

CREATE TABLE s.t1 (
    id1 BigInt,
    id2 BigInt,
    CONSTRAINT "pk1" PRIMARY KEY (id1)
)   
WITH(OIDS=FALSE);


INSERT INTO s.t1 (id1, id2) VALUES (2, 22);
INSERT INTO s.t1 (id1, id2) VALUES (3, 22);
INSERT INTO s.t1 (id1, id2) VALUES (4, 24);


SELECT EXISTS (SELECT TRUE FROM s.t1 t1 WHERE t1.id1 = 2,  
SELECT EXISTS (SELECT TRUE FROM s.t1 t1 WHERE t1.id2 = 22);
是否有一种方法可以检查单个语句中的多个条件

我在两个单独的列中查找值。 我想要的答案是这样的:

 bool | bool 
------+------
 t    | t
(1 row)
我得到了解决方案:

SELECT EXISTS(SELECT TRUE FROM s.t1 t1 WHERE t1.id1 = 6), 
EXISTS(SELECT TRUE FROM s.t1 t1 WHERE t1.id2 = 22);
输出:

 exists | exists 
 --------+--------
  f      | t
 (1 row)
演示:

演示:

那怎么办

SELECT max(x.t2) as t2,
       max(x.t22) as t22
FROM ((SELECT t1.id1 as t2, null as t22 FROM s.t1 t1 WHERE t1.id1 = 2)
        UNION
      (SELECT null as t2, t1.id2 as t22 FROM s.t1 t1 WHERE t1.id2 = 22)) as x;

怎么样

SELECT max(x.t2) as t2,
       max(x.t22) as t22
FROM ((SELECT t1.id1 as t2, null as t22 FROM s.t1 t1 WHERE t1.id1 = 2)
        UNION
      (SELECT null as t2, t1.id2 as t22 FROM s.t1 t1 WHERE t1.id2 = 22)) as x;

EXISTS生成一个布尔值,您可以直接使用该值:



EXISTS生成一个布尔值,您可以直接使用该值:



这给了我一个专栏。我们的想法是使用多个这样的条件,并在一个查询中得到结果。我的错,我刚刚编辑了我的答案,但现在,我不确定您想做什么。如果您想检索两列数据,您可能应该在子查询之间使用一个
并集
。谢谢您的提示。我根据你的答案得到了解决方案。这给了我一列。我们的想法是使用多个这样的条件,并在一个查询中得到结果。我的错,我刚刚编辑了我的答案,但现在,我不确定您想做什么。如果您想检索两列数据,您可能应该在子查询之间使用一个
并集
。谢谢您的提示。我根据你的答案得到了解决方案。
SELECT max(x.t2) as t2,
       max(x.t22) as t22
FROM ((SELECT t1.id1 as t2, null as t22 FROM s.t1 t1 WHERE t1.id1 = 2)
        UNION
      (SELECT null as t2, t1.id2 as t22 FROM s.t1 t1 WHERE t1.id2 = 22)) as x;
SELECT
  EXISTS (SELECT * FROM s.t1 x1  
        WHERE x1.id1 = 2)       AS ex1
  , EXISTS (SELECT * FROM s.t1 x2
        WHERE x2.id2 = 22)      AS ex2
        ;