我正在研究以下SQL:
select a.field1 a.field2 b.field3
(select FIELD from table3 where KEY = a.field1) as field4
from TAB1 a inner join TAB2 b on a.key = b.key.
如果在field4中有一个条目'N / A',我的要求是FIELD FROM table3的显示值。我正在尝试以下内容并收到错误“此SELECT语句不允许使用NTO子句:此处不允许使用子查询”
关于如何实现这一目标的任何指示...
select a.field1 a.field2 b.field3
case when (select FIELD into lv_value from TABLE3 where TABLE3.KEY = a.key) is null then 'N/A'
else.
lv_value
end as field4
from TAB1 a inner join TAB2 b on TAB1.KEY = TAB2.KEY.
答案 0 :(得分:0)
你不能这样做,你可以通过标准函数coalesce()
直接表达它:
select a.field1 a.field2 b.field3
coalesce( (select t3.FIELD
from table3 t3
where t3.KEY = a.field1
), 'N/A'
) as field4
from TAB1 a
inner join TAB2 b on a.key = b.key;
请注意,如果您有单个密钥的更多记录,则会出现subquery
错误,如果是,请使用LIMIT
子句或TOP
以您的为准DBMS 支持适当的order by
子句。
答案 1 :(得分:0)
您应该使用查询加入TABLE3,而不是使用左连接加入子查询。并且您可以使用ISNULL函数 - 如果您使用的是SQL Server - 使用它,结果应该是这样的;
select a.field1, a.field2, b.field3, ISNULL(c.lv_value , 'N/A') as field4
from TAB1 a inner join TAB2 b on TAB1.KEY = TAB2.KEY LEFT JOIN TABLE3 c ON c.KEY = a.KEY