1

我正在请求获取 3 个不同表中的行数。

所以我在 3 个简单请求之间使用联合来计算每个表中的行。

但我收到一个错误:“连接操作中的语法错误”

即使我没有加入我的查询...

任何人都可以帮助我吗?

这是请求:

Select Sum(asd) as 'totalRows' 
FROM ((Select Count(*) as 'asd' from Machines) 
Union (Select Count(*) as 'asd' from Factures) 
Union (Select Count(*) as 'asd'  From Consommation)) 
 as 'tab1'
4

2 回答 2

1

取决于你真正想要什么......一行多列,或多行有各自的计数。您的原始查询不正确,因为 UNION 语句应该是它的 OWN 查询,以与第一个查询相同的记录格式返回其自己的结果集(即:相同的数字、列名和数据类型。不只使用计数进行采样,采用以下示例语法。

select
      a.NumberField1,
      a.CharField1,
      a.DateField1
   from
      SomeTable a
   where
      a.SomeCondition = 1
UNION
      b.SomeField AS NumberField1,
      b.AnotherField AS CharField1,
      c.SomeDate AS DateField1
   from
      AnotherTable b
   where
      b.TestCondition = 6

以上将返回“SomeTable”中的所有行及其条件,并根据其条件包含“AnotherTable”中的行。如果有任何重复项,则将删除重复项……除非您执行了“UNION ALL”。但请注意,联合本身就是一个选择语句。

现在,回到你的。不确定是否/为什么由于被包裹在(parens)中而失败,但会被尝试为

Select 
      Sum(asd) as 'totalRows' 
   FROM 
   (   Select Count(*) as 'asd' 
          from Machines
       UNION ALL
       Select Count(*) as 'asd' 
          from Factures
       UNION ALL
       Select Count(*) as 'asd'  
          From Consommation ) as 'tab1'

我会更改为 union all,因为...说您的 Machines 计数和 Factures 计数均为 175... 只有一个原始条目会被退回,而您会为知道计数不正确而挠头。 .. 如果巧合的是,所有 3 个来源的计数相同,均为 175,请重试...您只会返回单个 175 记录,并且比预期的还要远。

于 2013-01-18T13:44:22.570 回答
0

我已经通过更改请求解决了这个问题,现在是:

Select (Select Count() from Machines) as cntMachines, 
    (Select Count() From Factures) as cntFactures, 
    (Select Count(*) from Consommation) as cntConsommation 
From [Machines Or any other table]

这不是我的问题的答案,但它是一个走动。

一个真正的答案仍然会受到赞赏。:)

于 2013-01-18T13:09:42.940 回答