0

私は2つのテーブルを持っています:次の列を持つ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を取得し、2番目のクエリでは121653を取得します。

この異なる結果の理由は何ですか?areにいくつかのフィールドがあることを知っていcountryます''。私にはそれらがグループとして表示されていないようで、私はそれらを数えたところ、134レコードであることがわかりました。でも理由がわかりません。

4

2 に答える 2

1

そうでない限りkeyUNIQUEその場合、なぜDISTINCTキーワードを気にするのですか?)、2つのクエリが同じ結果を返す必要がある理由はありません。

含まれていると仮定しt1ます:

+ ------ + ----- + -------- +
| 名前| キー| 長さ|
+ ------ + ----- + -------- +
| a | x | 5000 |
| b | x | 5000 |
| b | y | 5000 |
| c | z | 5000 |
+ ------ + ----- + -------- +

そしてt2含まれています:

+ ------ + --------- +
| 名前| 国|
+ ------ + --------- +
| a | 英国|
| 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(個別のキー)| 国|
    + --------------------- + --------- +
    | 1 | 英国|
    | 2 | fr |
    | 1 | de |
    + --------------------- + --------- +
    
  2. 2番目のクエリ:

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

    降伏します:

    + --------------------- +
    | count(個別のキー)|
    + --------------------- +
    | 3 |
    + --------------------- +
    

sqlfiddleでそれを参照してください。

于 2012-08-25T13:57:00.057 に答える
0

t2同じ行が複数ある場合name、結合によって重複が作成されます。

于 2012-08-25T13:14:49.193 に答える