我正在请求获取3个不同表中的行数。
所以我在3个简单请求之间使用了一个Union来计算每个表中的行数。
但是我收到错误:“加入操作中的语法错误”
即使我没有加入我的查询...
任何人都可以帮我这个吗?
这是请求:
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'
答案 0 :(得分: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”。但请注意,union是一个独立的select语句。
现在,回到你的身边。不确定是否/为什么因为被包裹在(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'
我将改为联盟,因为...说你的机器数和来自Factures的数量是175 ...只有一个原始条目会被退回,你会想知道计数是不对......如果巧合的是,所有3个来源的数量都相同,那么请再试一次......你只能获得单个175记录,并且比预期更远。
答案 1 :(得分: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]
这不是我的问题的答案,但这是一个循环。
真正的答案仍然会受到赞赏。 :)