我想检测每个表中是否存在值tableA
code value
a 1
b 2
c 3
tableB
code value
a 4
c 5
d 6
tableC
code value
e 10
f 11
g 12
我想设置变量。如果我设置像value = 'a'
这样的值。我想要的结果如下。value = a
存在于tableA
中,因此名为tableA
的列被设置为1
,而在tableC
中,value = a
不存在,因此值0
被设置。
code tableA tableB tableC valueA valueB valueC
a 1 1 0 1 4 null
我尝试了如下方法,但我不知道如何连接另一个表。
EXISTS (SELECT 1 FROM tableA WHERE code = 'a')
有没有更聪明的方法来实现这一点?如果有人有意见,请让我知道谢谢
3条答案
按热度按时间liwlm1x91#
SelVazis的答案是好的和干净的。然而,如果在任何表中都没有找到值,它将不会返回结果行。如果值在一个或多个表中不止一次,则会返回多个结果行。因此,最好先制作一个响应表并在该响应表中查找答案:
在本例中,我假设您希望从表中返回所有值,因此我对它们进行了字符串聚合。请随意使用min,max或任何浮动的值来替换它们。
DB fiddle for completeness here
cx6n0qe32#
我可能只是连接你正在寻找的三个数据集。你可以使用伪全外连接(因为没有真实的的连接条件)或聚合的交叉连接来完成这一点:
(For完整的外部连接可以用
select code, value as val
替换select min(value) as val
,用from a full outer join b using (code) full outer join c using (code)
替换from a cross join b cross join c
)。免责声明:如果表中的值可以为null,并且您希望将其显示为value exists,但value为null,则必须为此调整上述查询。
oxcyiej73#
假设
code
在每个表上都是唯一的。你可以使用
full outer join
来返回所有在left(tableA)或right(tableB)中匹配的记录:或者在
full outer join
上使用USING
而不是ON
:结果:
Demo here