postgresql:关于选择的问题

postgresql:关于选择的问题,postgresql,select,Postgresql,Select,我有一个疑问 SELECT t3 FROM tbl_join WHERE t2=3 AND t1 in (1,2,3); 输出为: t3 ---- 1 1 (2 rows) 它只给出两行,因为t3的条目不存在。是否可以修改SELECT查询,例如: SELECT t3||0 FROM tbl_join WHERE t2=3 AND t1 in (1,2,3); 得到这样的结果 t3 ---- 1 1 0 (3 rows) 我的意思是,是否可以编写一个查询,其中可

我有一个疑问

SELECT t3 FROM tbl_join WHERE t2=3 AND t1 in (1,2,3);
输出为:

 t3 
----
  1
  1
(2 rows)
它只给出两行,因为t3的条目不存在。是否可以修改SELECT查询,例如:

SELECT t3||0 FROM tbl_join WHERE t2=3 AND t1 in (1,2,3);
得到这样的结果

 t3 
----
  1
  1
  0
(3 rows)

我的意思是,是否可以编写一个查询,其中可以获得行数等于in子句中参数数的输出。如果一个条目不存在,则输出应该作为相应输入的某个常量值出现

您想要一个外部联接:类似

SELECT t.t3 
FROM (VALUES (1), (2), (3)) AS litvals 
    LEFT OUTER JOIN tbl_join as t 
    ON litvals.column1 = t.t1
WHERE t.t2=3
编辑:嗯。当tbl_join中没有对应的行与值匹配时,t2为NULL,当然不等于3。您可以通过子选择来处理此问题:

SELECT t.t3 
FROM (VALUES (1), (2), (3)) AS litvals 
    LEFT OUTER JOIN (SELECT * FROM tbl_join WHERE t2 = 3) AS t 
    ON litvals.column1 = tbl_join.t1

您需要外部连接:类似于

SELECT t.t3 
FROM (VALUES (1), (2), (3)) AS litvals 
    LEFT OUTER JOIN tbl_join as t 
    ON litvals.column1 = t.t1
WHERE t.t2=3
编辑:嗯。当tbl_join中没有对应的行与值匹配时,t2为NULL,当然不等于3。您可以通过子选择来处理此问题:

SELECT t.t3 
FROM (VALUES (1), (2), (3)) AS litvals 
    LEFT OUTER JOIN (SELECT * FROM tbl_join WHERE t2 = 3) AS t 
    ON litvals.column1 = tbl_join.t1

他们可能也需要一个。这只给出了2行。从值1、2、3中选择t3作为litvals JOIN tbl_JOIN ON litvals.column1=tbl_JOIN.t1,其中t2=3;我是不是错过了什么。。。但是db_测试=从值1、2、3中选择t3作为litvals LEFT OUTER JOIN tbl_JOIN ON litvals.column1=tbl_JOIN.t1,其中t2=3;给出了2行:他们可能也需要一个。这只给出了2行。从值1、2、3中选择t3作为litvals JOIN tbl_JOIN ON litvals.column1=tbl_JOIN.t1,其中t2=3;我是不是错过了什么。。。但是db_测试=从值1、2、3中选择t3作为litvals LEFT OUTER JOIN tbl_JOIN ON litvals.column1=tbl_JOIN.t1,其中t2=3;给出了两行:似乎假设t3中的值顺序相同,因为1、2、3和1,1,0中的t1表示没有t1=3的值。但如果不对结果集进行排序,则不知道值1、1和0属于哪个值。似乎假设t3中的值的顺序相同,因为1、2、3和1,1,0中的t1表示没有t1=3的值。但如果不对结果集排序,就不知道值1、1和0属于哪个。