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。

造成这种不同结果的原因是什么?知道 are 中有一些country字段''。在我看来,它们并没有作为一个组出现,我数了数,发现它们是 134 条记录。但我找不到原因。

4

2 回答 2

1

除非keyUNIQUE(在这种情况下,为什么要使用DISTINCT关键字?),您的两个查询没有理由返回相同的结果。

假设t1包含:

+--------+-----+--------+
| 姓名 | 关键 | 长度 |
+--------+-----+--------+
| 一个 | x | 5000 |
| 乙 | x | 5000 |
| 乙 | 是 | 5000 |
| c | z | 5000 |
+--------+-----+--------+

t2包含:

+--------+---------+
| 姓名 | 国家 |
+--------+---------+
| 一个 | 英国 |
| 乙 | 法语 |
| c | 德 |
+--------+---------+

然后您的查询将返回:

  1. 第一个查询:

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

    将产生:

    +---------+---------+
    | 计数(不同的键) | 国家 |
    +---------+---------+
    | 1 | 英国 |
    | 2 | 法语 |
    | 1 | 德 |
    +---------+---------+
    
  2. 第二个查询:

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

    将产生:

    +----------+
    | 计数(不同的键) |
    +----------+
    | 3 |
    +----------+
    

sqlfiddle上查看。

于 2012-08-25T13:57:00.057 回答
0

如果您有多个t2相同name的行,则连接将创建重复项。

于 2012-08-25T13:14:49.193 回答