Mysql DISTINCT不会删除重复项
由于某些原因,无法使用Mysql DISTINCT不会删除重复项,mysql,sql,Mysql,Sql,由于某些原因,无法使用选择DISTINCT删除重复项 我的桌子: mysql> select * from kasutaja; +----+---------+----------+---------------+ | id | eesnimi | perenimi | kasutaja_nimi | +----+---------+----------+---------------+ | 1 | Juku | Juust | juku23 | | 2 |
选择DISTINCT
删除重复项
我的桌子:
mysql> select * from kasutaja;
+----+---------+----------+---------------+
| id | eesnimi | perenimi | kasutaja_nimi |
+----+---------+----------+---------------+
| 1 | Juku | Juust | juku23 |
| 2 | Jaan | Jaanik | jann12 |
+----+---------+----------+---------------+
mysql> select * from riistvara;
+----+----------------+-----------+
| id | r_nimetus | seeria_nr |
+----+----------------+-----------+
| 1 | Latitude L2100 | 33333333 |
| 2 | Latitude L2110 | 44444444 |
+----+----------------+-----------+
mysql> select * from r_paigaldus;
+-------------+--------------+----------------+
| kasutaja_id | riistvara_id | paigalduse_aeg |
+-------------+--------------+----------------+
| 1 | 1 | 2010-01-01 |
| 1 | 2 | 2010-10-01 |
| 2 | 2 | 2010-01-01 |
| 2 | 1 | 2010-10-10 |
+-------------+--------------+----------------+
我正在使用的查询:
SELECT DISTINCT kasutaja_nimi, eesnimi, perenimi, r_nimetus, seeria_nr, paigalduse_aeg
FROM riistvara, kasutaja
JOIN r_paigaldus ON id = r_paigaldus.kasutaja_id;
查询结果的最终外观如下:
+---------------+---------+----------+----------------+-----------+--------------+
| kasutaja_nimi | eesnimi | perenimi | r_nimetus | seeria_nr |paigalduse_aeg|
+---------------+---------+----------+----------------+-----------+--------------+
| jann12 | Jaan | Jaanik | Latitude L2100 | 33333333 |2010-10-10 |
| juku23 | Juku | Juust | Latitude L2110 | 44444444 |2010-10-01 |
+---------------+---------+----------+----------------+-----------+--------------+
它看起来是什么样子:
+---------------+---------+----------+----------------+-----------+----------------+
| kasutaja_nimi | eesnimi | perenimi | r_nimetus | seeria_nr | paigalduse_aeg |
+---------------+---------+----------+----------------+-----------+----------------+
| juku23 | Juku | Juust | Latitude L2100 | 33333333 | 2010-01-01 |
| juku23 | Juku | Juust | Latitude L2110 | 44444444 | 2010-01-01 |
| juku23 | Juku | Juust | Latitude L2100 | 33333333 | 2010-10-01 |
| juku23 | Juku | Juust | Latitude L2110 | 44444444 | 2010-10-01 |
| jann12 | Jaan | Jaanik | Latitude L2100 | 33333333 | 2010-01-01 |
| jann12 | Jaan | Jaanik | Latitude L2110 | 44444444 | 2010-01-01 |
| jann12 | Jaan | Jaanik | Latitude L2100 | 33333333 | 2010-10-10 |
| jann12 | Jaan | Jaanik | Latitude L2110 | 44444444 | 2010-10-10 |
+---------------+---------+----------+----------------+-----------+----------------+
首先,这个查询很有效,因为
seeria\u nr
和paigalduse\u aeg
与您看到的不同,所以DISTINCT
无法过滤掉它们
您可以使用分组方式
获得所需内容:
GROUP BY
b.kasutaja_nimi
,b.eesnimi
,b.perenimi
,a.r_nimetus
这将为您带来您执行的结果-但请记住,
seeria\u nr
和paigalduse\u aeg
将随机显示值。首先,此查询工作正常,因为seeria\u nr
和paigalduse\u aeg
是不同的,正如您所看到的,DISTINCT
无法过滤掉他们
您可以使用分组方式
获得所需内容:
GROUP BY
b.kasutaja_nimi
,b.eesnimi
,b.perenimi
,a.r_nimetus
这将为您带来您执行的结果-但请记住,
seeria\u nr
和paigalduse\u aeg
将随机显示值。正确使用join
。简单规则:切勿在FROM
子句中使用逗号。始终使用显式JOIN
语法
SELECT kasutaja_nimi, eesnimi, perenimi, r_nimetus, seeria_nr, paigalduse_aeg
FROM kasutaja k JOIN
r_paigaldu rp
ON k.id = rp.kasutaja_id JOIN
riistvarar r
ON r.id = rp.riistvara_id;
这可能会消除对
选择distinct
的需要。此外,您应该使用表别名并限定所有列名。正确使用join
。简单规则:切勿在FROM
子句中使用逗号。始终使用显式JOIN
语法
SELECT kasutaja_nimi, eesnimi, perenimi, r_nimetus, seeria_nr, paigalduse_aeg
FROM kasutaja k JOIN
r_paigaldu rp
ON k.id = rp.kasutaja_id JOIN
riistvarar r
ON r.id = rp.riistvara_id;
这可能会消除对
选择distinct
的需要。此外,您应该使用表别名并限定所有列名。您是在谈论mysql还是sql server?在任何一种情况下,distinct
都可能按设计工作,您的假设并不正确。这些结果是正确的,您在查看r\u nimetus
、seeria\u nr
和paigalduse\u aeg
时有不同的值组合纬度L2100
和纬度L2110
与33333333
和444444
与2010-01-01
和2010-10-01
相结合。您在找这个吗?最终结果集是否包含每个日期的条目?请解释你的预期产出。顺便说一句,DISTINCT适用于整行,而不是它前面的列。除非您在另一个表中有一些我们不知道的其他条件,否则您的预期结果没有多大意义。对于jann12
您有纬度L2100
(分组中的较低值)、33333333
(分组的较低值)和2010-10-10
(分组的较高值)。对于joku23
您有Latitude 2110
(分组中的上限值)、4444
(分组中的上限值)和2010-10-01
(分组中的上限值)。您是在谈论mysql还是sql server?在任何一种情况下,distinct
都可能按设计工作,您的假设并不正确。这些结果是正确的,您在查看r\u nimetus
、seeria\u nr
和paigalduse\u aeg
时有不同的值组合纬度L2100
和纬度L2110
与33333333
和444444
与2010-01-01
和2010-10-01
相结合。您在找这个吗?最终结果集是否包含每个日期的条目?请解释你的预期产出。顺便说一句,DISTINCT适用于整行,而不是它前面的列。除非您在另一个表中有一些我们不知道的其他条件,否则您的预期结果没有多大意义。对于jann12
您有纬度L2100
(分组中的较低值)、33333333
(分组的较低值)和2010-10-10
(分组的较高值)。对于joku23
,您有纬度2110
(分组中的上限值)、4444
(分组中的上限值)和2010-10-01
(分组中的上限值)。