Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 存在时,联接表在选择用例中不可用()_Sql Server - Fatal编程技术网

Sql server 存在时,联接表在选择用例中不可用()

Sql server 存在时,联接表在选择用例中不可用(),sql-server,Sql Server,我发现下面的代码不起作用。如果存在从T2中选择1,则T2表不可用。我现在想了解为什么它不可用,以及关于谁应该编写更好的代码的一些建议。我知道,当T2.cnt>=1时,我可以用CASE替换,但我从一开始就计划在连接子选择中不使用cnt列 SELECT T1.*, CASE WHEN EXISTS (SELECT 1 FROM T2) THEN "ONE" ELSE 'TWO' END AS 'Test' FROM T AS T1 LEFT JOIN ( SELE

我发现下面的代码不起作用。如果存在从T2中选择1,则T2表不可用。我现在想了解为什么它不可用,以及关于谁应该编写更好的代码的一些建议。我知道,当T2.cnt>=1时,我可以用CASE替换,但我从一开始就计划在连接子选择中不使用cnt列

SELECT T1.*,
    CASE WHEN EXISTS (SELECT 1 FROM T2) THEN "ONE" ELSE 'TWO' END AS 'Test'
FROM T AS T1
LEFT JOIN (
    SELECT T.BK, count(*) as cnt
    FROM T
    WHERE T.filter > 50
    GROUP BY T.BK 

) as T2 on T1.BK = T2.BK
不,您不能在SELECT中的子查询中引用T2,因为T2是FROM中子查询的别名;它在该子查询中没有上下文。但是,看起来在FROM中不需要该子查询,它应该位于EXISTS中,因为在SELECT中不返回T2中的任何列:

选择T1.*-定义列,而不是使用* 案例存在时选择1 从T2开始 其中T2.filter>50 T1.BK=T2.BK,然后是‘一’或‘二’——我想你指的是‘一’。双引号用于对象名称 作为测试结束-不要对对象名/别名使用单引号,它们是用于文本字符串 从T到T1; 如果上述情况正确,那么您甚至不需要子查询,您可以使用一些窗口条件聚合:

选择T1.*-定义列,而不是使用* CASE COUNTCASE当T1.filter>50时,1结束于T1.BK的分区,当0时,则“两个”,否则“一个”结束为测试 从T到T1; 不,您不能在SELECT中的子查询中引用T2,因为T2是FROM中子查询的别名;它在该子查询中没有上下文。但是,看起来在FROM中不需要该子查询,它应该位于EXISTS中,因为在SELECT中不返回T2中的任何列:

选择T1.*-定义列,而不是使用* 案例存在时选择1 从T2开始 其中T2.filter>50 T1.BK=T2.BK,然后是‘一’或‘二’——我想你指的是‘一’。双引号用于对象名称 作为测试结束-不要对对象名/别名使用单引号,它们是用于文本字符串 从T到T1; 如果上述情况正确,那么您甚至不需要子查询,您可以使用一些窗口条件聚合:

选择T1.*-定义列,而不是使用* CASE COUNTCASE当T1.filter>50时,1结束于T1.BK的分区,当0时,则“两个”,否则“一个”结束为测试 从T到T1;