SQL Server:左连接下存在的位置[关闭]

2023-12-10

无法使用带有左连接的代码

LEFT JOIN 
    (SELECT
         CASE
            WHEN EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
                         WHERE TABLE_NAME = 'TABLE_A') 
               THEN
                  SELECT q23.MRID, q23.NTP 
                  FROM 
                      (SELECT MRID, NSIA4 NTP FROM TABLE_A a, TABLE_B b 
                       WHERE a.obj = b.co
                       UNION 
                       SELECT MRID, CASE WHEN a.NBR = 0 then NTPSERV END NTP FROM TABLE_C a, TABLE_B b WHERE a.obj = b.co) q23
ELSE SELECT q23.MRID , q23.NTP from ( SELECT MRID, CASE WHEN a.NBR = 0 then NTPSERV END NTP FROM TABLE_C a, TABLE_B b WHERE a.obj = b.co) q23
END ) q24 ON q0.MRID = q24.MRID

这将合并两个表的结果并将它们显示为并集。由于我们有多个数据库,并且在某些数据库中 TABLE_A 不存在。


您似乎混淆了 SQL 中的不同概念。 ACASE表达式正是这样的:标量表达式。它返回一个具有特定类型的列值。这是not控制流,但数据流(也就是说,它只对查询中的数据进行操作)。

SQL 查询引用特定的表和列。这些不能是动态的或有条件的,除非您在 T-SQL 中使用动态 SQL。 T-SQL 是一种脚本语言,它支持条件控制流逻辑:

declare @sql nvarchar(max);

if exists (select 1 from information_schema.tables where table_name = 'Table_a')
begin
    @sql = 'select col from table_a';
end;
else
begin
    @sql = 'select col from table_b';
end;

exec sp_executesql @sql;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server:左连接下存在的位置[关闭] 的相关文章

随机推荐