2012-09-19 60 views
3

我是SQL新手。我需要在幾個不同的網站上運行一次性查詢以獲得計數。查詢需要給我一個基於where子句的所有記錄的計數。但是我很難搞清楚語法。SQL計數查詢,使用2個不同表中的where子句

這裏是我的嘗試:

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

這給了我一個瘋狂的數字。

基本上,IDXKEYID是一個主鍵,並存在於KEYS和KEYFLAGS表中。我希望數據庫中符合上述WHERE子句的所有IDXKEYID記錄的計數。我只想要1列/行中的1個簡單結果。

COUNT 
----- 
12346 

在此先感謝!

+2

使用明確的聯接語法。你得到了一個笛卡爾連接因此瘋狂的號碼 –

+0

@Richard IDXLEVELID在兩個表中都不存在,它是IDXKEYID。使用火鳥。 – explosivo

+0

@exp - 好點。觸發快樂:)很高興問題得到解決 – RichardTheKiwi

回答

2
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 

,也可以使用寫它的存在

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) 
+0

*編輯*非常感謝!我正在使用第一個示例。我將最後一行更改爲AND KEYS.IDXKEYID = KEYFLAGS.IDXKEYID。一旦計時器結束,我會標記爲已回答:) – explosivo

相關問題