2011-08-25 27 views
-1

爲什麼第一個聲明不返回第二個數字?聲明未返回正確的數字或​​行

select random_selection.randnum, 
    random_selection.createddate, 
    random_selection.ozip3, 
    random_selection.boxid, 
    random_selection.boxaddr, 
    random_selection.locdesc, 
    random_selection.loccity, 
    random_selection.lastmf, 
    random_selection.lastsat, 
    random_selection.boxtype, 
    random_selection.svcclas, 
    random_selection.dropzip5, 
    dropper_city_brk_2.dropper_id 
from random_selection, dropper_city_brk_2 
where random_selection.ozip3 = dropper_city_brk_2.zip3 
and dropper_city_brk_2.dropper_id <> 10002 
and random_selection.dropper_id is null 
order by dropper_id; 

其次聲明:

select count(*) from random_selection where dropper_id is null; 

回答

2

您的查詢是不一樣的,所以你的記錄計數將是不一樣的。你第一次查詢是加入2個表,你的第二個查詢只獲取一個表的記錄數。另外,你的第一個查詢中有WHERE個子句,它們不在第二個查詢中。

如果你希望你的第二個查詢返回相同數量的記錄,那麼你必須使用相同的表和WHERE子句,你必須在第一

select count(*) 
from random_selection, dropper_city_brk_2 
where random_selection.ozip3 = dropper_city_brk_2.zip3 
and dropper_city_brk_2.dropper_id <> 10002 
and random_selection.dropper_id is null 

編輯:

select count(*) 
from random_selection 
INNER JOIN dropper_city_brk_2 
    ON random_selection.ozip3 = dropper_city_brk_2.zip3 
WHERE dropper_city_brk_2.dropper_id <> 10002 
    and random_selection.dropper_id is null 

這是一個visual explanation of JOINs,作爲參考可能會有所幫助。

+1

嗯,技術上,_might_不是一樣的 – Gerrat

+1

正確的,他們可能不一樣。但是你有一個查詢加入一個表,第二個查詢不是。這是一個很大的區別。 – Taryn

+0

第二個查詢應返回第一個查詢中的一個或多個行,我要的是將dropper_city_brk_2.dropper_id添加到結果中,其中random_selection.ozip3 = dropper_city_brk_2.zip3 – Mike

0

您的意思是「爲什麼第二個查詢不返回第一個查詢給出的行數」?如果是這樣,那麼可能是因爲第一個查詢中的交叉連接和額外的where子句。

如果出於某種原因,您認爲這些完全不同的查詢應該產生相同數量的行,那麼您將不得不告訴我們數據的結構。

+0

我同意我們可能需要一些數據。 – Taryn

+0

'select * from random_selection and random_selection.dropper_id is null'; 即時只是試圖將dropper_city_brk_2.dropper_id添加到結果中,常見字段是random_selection.ozip3和dropper_city_brk_w.zip3 – Mike

+1

所有這些都是gobbeldygook **,直到您解釋表**的結構爲止。那裏有什麼專欄?這些欄目如何相關?有沒有主鍵?外鍵?其他限制? – 2011-08-25 21:40:31