SQL错误:无效的对象名称'表名'

时间:2015-01-21 12:52:14

标签: sql sql-server

我有两张表格如下:

tblTransaction
tblMobileRegistration

我想加入这两个表,并计算特定列值的原始数量,而不是' 1'如下:

SELECT COUNT(Transaction_MobileErrorCode) FROM T1 WHERE Transaction_MobileErrorCode <> ''

我的整个查询:

SELECT 
T1.*, 
T2.*,  
(SELECT COUNT(Transaction_MobileErrorCode) FROM T1 WHERE Transaction_MobileErrorCode <> '')  
FROM 
(SELECT MobileRegistration_DateTime, Transaction_MobileErrorCode FROM tblTransaction, tblMobileRegistration
 WHERE T1.ID1 = T2.ID1 AND 
      T1.ID2 = '111111' AND
      T1.ID3 = '222222' AND
      T1.ID4 = '333333' AND
      T1.ID5 = '444444') AS T1,

      tblMobileRegistration AS T2

但是我收到了这个错误:

Invalid object name 'T1'.

所以我该如何解决? 谢谢你的帮助...

3 个答案:

答案 0 :(得分:1)

要说出你真正想要的结果有点难。但是以下可能会做你想做的事情:

SELECT MobileRegistration_DateTime, Transaction_MobileErrorCode,
       SUM(CASE WHENTransaction_MobileErrorCode <> '' THEN 1 ELSE 0 END) OVER ()
FROM tblTransaction t JOIN
     tblMobileRegistration mr
     ON t.ID1 = mr.ID1
WHERE T1.ID2 = '111111' AND
      T1.ID3 = '222222' AND
      T1.ID4 = '333333' AND
      T1.ID5 = '444444';

您应该学会使用正确的,明确的join语法。您只需要有太多的表引用来处理您可能想要做的事情。

此版本使用窗口功能。您没有指定数据库,但这是大多数数据库支持的ANSI标准语法。

答案 1 :(得分:1)

这是你最内心的疑问。没有别名为T1(或T2)。您要么混合括号,要么丢失别名。如果你错过了别名,你真的需要比在任何地方使用t1和t2更有创意。调试查询非常困难。

    SELECT MobileRegistration_DateTime, 
Transaction_MobileErrorCode 
FROM tblTransaction, 
tblMobileRegistration
         WHERE T1.ID1 = T2.ID1 AND 
              T1.ID2 = '111111' AND
              T1.ID3 = '222222' AND
              T1.ID4 = '333333' AND
              T1.ID5 = '444444'

正如其他人所说,你的查询非常混乱。如果你真的打算拥有所有派生表,那么将其分解并从内到外构建它。

答案 2 :(得分:0)

这是一个运行时错误。

首先,它将从表中检查select语句中的所有列,但不检查已分配的表(T1将在执行时创建并在执行后删除) 删除那个select语句(从t1开始)然后执行它将起作用。

(SELECT COUNT(Transaction_MobileErrorCode) FROM T1)

从这一行你得到错误