【发布时间】:2014-09-08 17:41:20
【问题描述】:
带有 UNION 查询的问题,我需要从一个表中获取“术语”的记录数,其中我指定了“ID”和“计数”字段。
注意如果分级机怀疑使用了 UNION ALL,则分级机正在降级。
我正在尝试几种不同的格式……但没有一个能正常工作。
------(版本 1)------
例如
select count(term) from frequency where (select docid =
'10398_txt_earn' where count = '1' UNION select docid =
'925_txt_trade' where count = '1');
给我“0”。评分员告诉我“0”不正确。
如果我分成两部分,我会得到每个部分的值(110 和 225)。
------(版本 2)------
我修改了查询,使用这里的格式:
http://sqlite.1065341.n5.nabble.com/UNION-QUERY-td42629.html
所以我现在有查询(顺便说一句......与海报所暗示的不同,我必须使用 UNION......除非我可以使用 UNION ALL 然后选择唯一记录......但这似乎是不必要的计算步骤)
select count(term) from (select * from frequency where
(docid='10398_txt_earn' and count='1'))
UNION
select term from (select * from frequency where
(docid='925_txt_trade' and count='1'));
给我两行输出:第 1 行:110,第 2 行:225
如果我将 'select count(term)' 替换为 'select term'...我会得到一个列表,其长度是上述两个值的总和
--------(版本 3)--------
select (term) from frequency where (select docid = '10398_txt_earn'
where count = '1')
UNION
select (term) from frequency where (select docid = '925_txt_trade'
where count = '1');
再次,给我两行输出:第 1 行:110,第 2 行:225
问题??? 您将如何修改它以便获得一个包含 UNIQUE 共享术语计数的值?
【问题讨论】:
-
count 是一个保留字。我很惊讶你可以在 where 子句中使用它而不在
[]中转义它。此外,是否所有“条款”都具有非空值?如果不是,您的计数会有所不同,因为计数不会计算空字段。但是,如果您使用count(*),它将计算所有行,而不考虑空值。最后,您的第二个查询似乎应该返回您在假设 count 是文本字段、docID 是文本字段并且 term 永远不会为空之后的内容。 -
'count' 有两个角色。第一个实例,如“count(term)”是查询的一部分......第二个实例,如“count = '1'”是因为数据库中的一个字段称为“count”
-
将
[count] = '1'括在括号中 RDBMS 可能会混淆计数函数与计数字段。第二个 tablename.term 有空值吗?如果是这样计算空值不起作用。 -
@xQbert
COUNT不是list of keywords in Sqlite 的元素。 -
不...我不认为计数是导致问题的原因...它没有导致以前的问题出现问题。工会的说法是错误的。我需要知道如何纠正它。