【问题标题】:SQL count query, using where clause from 2 different tablesSQL 计数查询,使用来自 2 个不同表的 where 子句
【发布时间】:2012-09-20 05:19:17
【问题描述】:

我是 SQL 新手。我需要在几个不同的站点上运行一次性查询才能获得计数。查询需要根据 where 子句向我提供所有记录的计数。但我无法弄清楚语法。

这是我尝试过的:

SELECT COUNT(KEYS.IDXKEYID) FROM KEYS, KEYFLAGS 
WHERE IDXLEVELID = 1 
AND KEYFLAGS.BKEYSEVERMADE = -1

这给了我一个疯狂的数字。

基本上,IDXKEYID 是一个主键,并且存在于 KEYS 和 KEYFLAGS 表中。我想要统计数据库中满足上述 WHERE 子句标准的所有 IDXKEYID 记录。我只想要 1 列/行中的 1 个简单结果。

COUNT
-----
12346

提前致谢!

【问题讨论】:

  • 使用显式连接语法。你得到一个笛卡尔连接因此疯狂的数字
  • @Richard IDXLEVELID 在两个表中都不存在,它是 IDXKEYID。使用火鸟。
  • @exp - 好点。触发快乐 :) 很高兴问题得到解决

标签: sql count


【解决方案1】:
SELECT COUNT(DISTINCT KEYS.IDXKEYID) -- count each key only once
  FROM KEYS, KEYFLAGS 
 WHERE KEYS.IDXLEVELID = 1 
   AND KEYFLAGS.BKEYSEVERMADE = -1
   AND KEYS.IDXKEYID = KEYFLAGS.IDXKEYID -- you're missing this link

或者您可以使用 EXISTS 编写它

SELECT COUNT(1) -- count each key only once
  FROM KEYS
 WHERE KEYS.IDXLEVELID = 1 
   AND EXISTS (
       SELECT *
         FROM KEYFLAGS
        WHERE KEYS.IDXKEYID = KEYFLAGS.IDXKEYID -- correlate
          AND KEYFLAGS.BKEYSEVERMADE = -1)

【讨论】:

  • 编辑 非常感谢!我正在使用第一个示例。我将最后一行更改为 AND KEYS.IDXKEYID = KEYFLAGS.IDXKEYID。计时器到时,我会标记为已回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多