Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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 如果行存在或不存在,如何将结果作为列值返回?_Sql_Postgresql - Fatal编程技术网

Sql 如果行存在或不存在,如何将结果作为列值返回?

Sql 如果行存在或不存在,如何将结果作为列值返回?,sql,postgresql,Sql,Postgresql,我有两张桌子。表一和表二 table1 - tID,title,description table2 - sID,tID,title,description 表1(t1)始终包含值。 在表2中(t2),如果存在一行,tID(外键)将始终与t1(主键)中的tID匹配 我想创建一个select语句,其中我从t1中选择所有列,并创建一个附加列“ex”,该列的值为true或false,具体取决于t2中是否有记录,其中tID匹配 Select t1.*, (some code) as ex from

我有两张桌子。表一和表二

table1 - tID,title,description

table2 - sID,tID,title,description
表1(t1)始终包含值。 在表2中(t2),如果存在一行,tID(外键)将始终与t1(主键)中的tID匹配

我想创建一个select语句,其中我从t1中选择所有列,并创建一个附加列“ex”,该列的值为true或false,具体取决于t2中是否有记录,其中tID匹配

Select t1.*, (some code) as ex from table1 t1,table2 t2;  
明白吗?例如,如果
从表1 t1、表2 t2中选择t1.*、t2.*,其中t1.tID=t2.tID
返回任何行,则ex同样应为true。。。我该怎么做

编辑:任何列都不能为空


编辑:忘了提及,我希望select语句仅在我指定的sID=someIdValue的地方匹配….

使用
左连接
(外部连接),然后使用
IS NULL
表达式检查
表2中是否存在
tID

Select t1.*, t2.tid is not null as ex 
from table1 t1
left join table2 t2 on t1.tid = t2.tid


编辑:“如果我只想要sID与某个值匹配的值,该怎么办?”

Select t1.*,t2.tid作为ex不为空
来自表1 t1
在t1.tid=t2.tid和t2.sid=

使用
左连接
(外部连接),然后使用
IS NULL
表达式检查
表2中是否存在
tID

Select t1.*, t2.tid is not null as ex 
from table1 t1
left join table2 t2 on t1.tid = t2.tid


编辑:“如果我只想要sID与某个值匹配的值,该怎么办?”

Select t1.*,t2.tid作为ex不为空
来自表1 t1
在t1.tid=t2.tid和t2.sid=
试试这个

select *, coalesce(tID = true, false) = true as is_exists from table1 t1
left join table2 t2 using (tid)
试试这个

select *, coalesce(tID = true, false) = true as is_exists from table1 t1
left join table2 t2 using (tid)

如果这对你有用,试试下面的一个

 declare @T1 as Table 
(
tId int,
title varchar(25),
description varchar(50)
)

declare @T2 as Table 
(
sid int,
tId int,
title varchar(25),
description varchar(50)
)
insert into @t1 (tId,title,description) values(1,'abc','test')
insert into @t1 (tId,title,description) values(2,'abc','test')
insert into @t1 (tId,title,description) values(3,'abc','test')
insert into @t1 (tId,title,description) values(4,'abc','test')
insert into @t1 (tId,title,description) values(5,'abc','test')

insert into @t2 (tId,title,description) values(10,'abc','test')
insert into @t2 (tId,title,description) values(2,'abc','test')
insert into @t2 (tId,title,description) values(3,'abc','test')
insert into @t2 (tId,title,description) values(14,'abc','test')
insert into @t2 (tId,title,description) values(5,'abc','test')

Select distinct t1.*, 
   case when t2.tid is null then 'False' else 'True' end as ex from @T1 t1    
   left join @T2 t2 
   on t1.tId = t2.tId  
输出

1   abc test    False
2   abc test    True
3   abc test    True
4   abc test    False
5   abc test    True

如果这对你有用,试试下面的一个

 declare @T1 as Table 
(
tId int,
title varchar(25),
description varchar(50)
)

declare @T2 as Table 
(
sid int,
tId int,
title varchar(25),
description varchar(50)
)
insert into @t1 (tId,title,description) values(1,'abc','test')
insert into @t1 (tId,title,description) values(2,'abc','test')
insert into @t1 (tId,title,description) values(3,'abc','test')
insert into @t1 (tId,title,description) values(4,'abc','test')
insert into @t1 (tId,title,description) values(5,'abc','test')

insert into @t2 (tId,title,description) values(10,'abc','test')
insert into @t2 (tId,title,description) values(2,'abc','test')
insert into @t2 (tId,title,description) values(3,'abc','test')
insert into @t2 (tId,title,description) values(14,'abc','test')
insert into @t2 (tId,title,description) values(5,'abc','test')

Select distinct t1.*, 
   case when t2.tid is null then 'False' else 'True' end as ex from @T1 t1    
   left join @T2 t2 
   on t1.tId = t2.tId  
输出

1   abc test    False
2   abc test    True
3   abc test    True
4   abc test    False
5   abc test    True
存在(子查询)
生成一个布尔值,您可以直接使用该值:



  • 这将生成t1中的所有行,加上一个标志,指示t2中存在一个或多个对应行

  • 如果只需要t2中具有匹配行的t1记录,请将
    exists()
    移动到where子句:


存在(子查询)
生成一个布尔值,您可以直接使用该值:



  • 这将生成t1中的所有行,加上一个标志,指示t2中存在一个或多个对应行

  • 如果只需要t2中具有匹配行的t1记录,请将
    exists()
    移动到where子句:




我不明白-如果值为null,我如何将其转换为true-false?另外,我的任何列都不能存储null,它们都必须有值。@KaizerSozay null是外部联接的产物。表达式
t2.tid为null
如果
tid
存在于
table2
中,则返回true,否则返回false。如果我只想要sID与某个值匹配的值怎么办?@KaizerSozay逻辑被交换(如果有条目,则显示false),现在已经更正了。关于如何匹配sID有什么建议吗?我不明白-如果该值为null,如何将其转换为true-false?另外,我的任何列都不能存储null,它们都必须有值。@KaizerSozay null是外部联接的产物。表达式
t2.tid为null
如果
tid
存在于
table2
中,则返回true,否则返回false。如果我只想要sID与某个值匹配的值怎么办?@KaizerSozay逻辑被交换(如果有条目,则显示false),现在已更正。是否有关于如何匹配sID的建议?如果tID在每个表中有不同的名称,我将如何修改您的语句?这不是很明显。这似乎不适用于postgresql。。。错误只是强调了错误keyword@KaizerSozay你说得对,把coalesce中的类型搞乱了,编辑有没有办法也匹配sID?@KaizerSozay
left join table 2 t2 on t1.t1id=t2.t2id
如果tID在每个表中有不同的名称,我该如何修改你的语句?这不是很明显。这似乎不适用于postgresql。。。错误只是强调了错误keyword@KaizerSozay你说得对,把所有人都搞砸了,编辑任何关于如何匹配sID的想法?@KaizerSozay
左连接表2 t2 on t1.t1id=t2.t2id
声明@t1为表..
在postgres Sql中无效语法这些表仅用于示例,但逻辑相同
声明@t1为表..
在postgres Sql中无效语法这些表仅用于但逻辑是一样的