2012-08-25 36 views
0

我有兩個表: T1有以下的列:name | key | length
t2有以下的列:name | country.差異查詢與組導致由沒有它

我需要選擇長度> 2000中的所有不同的鍵按國家分組。所以,我做了

SELECT count(distinct key), country 
from db.t1 
inner join db.t2 
on t1.name=t2.name 
where length>2000 
group by country; 

但是,當我使查詢:

SELECT count(distinct key) 
from db.t1 
where Length>2000; 

我應該得到同等的結果,但我得到不同的結果。例如,在第一個查詢中,我得到125494,在第二個中我得到:121653.

這是什麼原因導致這種不同的結果?瞭解country中有一些字段是''。在我看來,他們並不是一個團體,我計算了他們,發現他們有134條記錄。但我找不到原因。

回答

1

除非keyUNIQUE(在這種情況下,爲什麼要用DISTINCT關鍵字?),沒有理由讓您的兩個查詢返回相同的結果。

假設t1包含:

 
+------+-----+--------+ 
| name | key | length | 
+------+-----+--------+ 
| a | x | 5000 | 
| b | x | 5000 | 
| b | y | 5000 | 
| c | z | 5000 | 
+------+-----+--------+ 

而且t2包含:

 
+------+---------+ 
| name | country | 
+------+---------+ 
| a |  uk | 
| b |  fr | 
| c |  de | 
+------+---------+ 

然後你的查詢將返回:

  1. 首先查詢:

    SELECT count(distinct key), country 
    from db.t1 
    inner join db.t2 
    on t1.name=t2.name 
    where length>2000 
    group by country; 
    

    將產生:

     
    +---------------------+---------+ 
    | count(distinct key) | country | 
    +---------------------+---------+ 
    |     1 |  uk | 
    |     2 |  fr | 
    |     1 |  de | 
    +---------------------+---------+ 
    
  2. 第二個查詢:

    SELECT count(distinct key) 
    from db.t1 
    where Length>2000; 
    

    將產生:

     
    +---------------------+ 
    | count(distinct key) | 
    +---------------------+ 
    |     3 | 
    +---------------------+ 
    

見它sqlfiddle

0

如果在t2中有多個行,並且使用相同的name,則連接將會創建重複項。

+0

不是。它在t2中是唯一的值,但在t1中很多。這兩個表格以一對多的方式連接。 –